c++ - 基类与派生类共享字段名时的非法成员初始化

标签 c++

我有一个 Shape->Triangle->Triforce 的层次结构,它们都有一个私有(private)字符串成员 sName。

`Shape::Shape(string name) : sName(name){}`

在 Triforce 类(继承自 Triangle)中,我可以使用这个构造函数:

Triforce::Triforce(string name) : Triangle(name){}

但是这个 Triforce::Triforce(string name) : Shape(name){} 给出错误:`非法成员初始化'Shape'不是基础或成员。 这是如何运作的?既然它们都在同一个层次结构中,为什么调用父编译器而不调用基类呢?

最佳答案

每个 Triangle 构造函数都必须 - 显式或隐式 - 调用其中一个 Shape 构造函数,因此在 Triforce 中选择哪个 是合理的>Triangle 指导员调用并让它协调 Shape 构造,但在您尝试执行时干扰 Shape 构造是不合理的 - Triangle 构造函数应该知道已经构造了它的基础 Shape 对象?您应该保留 Triforce::Triforce(const std::string& name) : Triangle(name) { } 构造函数并删除试图调用 Shape 构造函数的构造函数。

关于c++ - 基类与派生类共享字段名时的非法成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28164148/

相关文章:

c++ - Rcpp 将 vector 复制到 vector

c++ - 从参数包中提取成员类型

python - 这是所有编程语言的普遍错误吗

c++ - 将包含单个数组的结构声明为打包有什么缺点吗?

c++ - 使用 CRT 内存泄漏检测时出现编译错误

c++ - 如何将 dispatch_queue_t 分配给结构中的变量

c++ - 是否可以为模板类的模板函数成员起别名?

C++ 我可以在没有计时器的情况下制作 boost::asio 连接套接字吗?

c++ - 为什么即使不使用指向指针的指针作为参数调用该函数,它也能正常工作?

c++ - 如何插入 `std::map<string, double>* myMap`?