2011-09-30 210 views
0

我有一个基类'A',它有一个子类'B',它有一个子类'C',子类'D'。C++继承:错误C2614调用基类的构造函数

我想d叫“A的构造函数,

D(int x,int y):A(x,y){}; 

,但我收到错误消息: 错误C2614: 'd':非法成员初始化: 'A' 不是基或成员。

D可以调用任何C的构造函数,但这不是我想要的。 任何帮助将超级赞赏。

回答

1

正如马克赎金的answer状态,派生类只允许调用其基类的构造函数。

在你的情况下,你可以通过沿着继承层次传递D的构造函数参数来解决问题,直到A的构造函数被B用这些参数调用。

另一个选项是创建一个protected函数,说A::init(args),可以直接调用D

3

你被困住了,这就是C++的工作方式 - 你只能调用你的直接父对象的构造函数。你可以菊花链连接它们,以便D调用C的构造函数,该构造函数调用B的构造函数,该构造函数调用A的构造函数。

D(int x,int y):C(x,y){}; 
C(int x,int y):B(x,y){}; 
B(int x,int y):A(x,y){}; 
+0

有没有办法在A中创建一个只能调用一次的方法? – James

+0

@James,不太清楚你想达到什么目的,但是肯定 - 创建一个类的布尔成员,在构造函数中将其初始化为false,在方法中检查它,如果它为true,则失败,将其设置为true方法。 –