我的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){}
给出错误:“非法成员初始化'形状'不是基地或成员。
这是如何运作的?既然它们都在同一个层次结构中,为什么要调用父编译器而不是基类呢?
答案 0 :(得分:1)
每个Triangle
构造函数必须 - 显式或隐式 - 调用其中一个Shape
构造函数,因此在Triforce
中选择要调用的Triangle
指导者是合理的协调Shape
构造,但不合理地干扰Shape
构造,因为你试图做的事情 - Triangle
构造函数应该知道如何知道它的基础Shape
对象已经构建?您应该保留Triforce::Triforce(const std::string& name) : Triangle(name) { }
构造函数并删除试图调用Shape
构造函数的构造函数。