2011-09-30 84 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方法。 –