当基类与派生类共享字段名时,非法成员初始化

时间:2015-01-27 05:59:52

标签: c++

我的Shape->Triangle->Triforce层次结构都有私有字符串成员sName。

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

在Triforce类中(继承自Triangle)我可以使用这个construcotr:

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

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

1 个答案:

答案 0 :(得分:1)

每个Triangle构造函数必须 - 显式或隐式 - 调用其中一个Shape构造函数,因此在Triforce中选择要调用的Triangle指导者是合理的协调Shape构造,但不合理地干扰Shape构造,因为你试图做的事情 - Triangle构造函数应该知道如何知道它的基础Shape对象已经构建?您应该保留Triforce::Triforce(const std::string& name) : Triangle(name) { }构造函数并删除试图调用Shape构造函数的构造函数。