我有一個基類'A',它有一個子類'B',它有一個子類'C',子類'D'。C++繼承:錯誤C2614調用基類的構造函數
我想d叫「A的構造函數,
D(int x,int y):A(x,y){};
,但我收到錯誤消息: 錯誤C2614: 'd':非法成員初始化: 'A' 不是基或成員。
D可以調用任何C的構造函數,但這不是我想要的。 任何幫助將超級讚賞。
我有一個基類'A',它有一個子類'B',它有一個子類'C',子類'D'。C++繼承:錯誤C2614調用基類的構造函數
我想d叫「A的構造函數,
D(int x,int y):A(x,y){};
,但我收到錯誤消息: 錯誤C2614: 'd':非法成員初始化: 'A' 不是基或成員。
D可以調用任何C的構造函數,但這不是我想要的。 任何幫助將超級讚賞。
正如馬克贖金的answer狀態,派生類只允許調用其基類的構造函數。
在你的情況下,你可以通過沿着繼承層次傳遞D
的構造函數參數來解決問題,直到A
的構造函數被B
用這些參數調用。
另一個選項是創建一個protected
函數,說A::init(args)
,可以直接調用D
。
你被困住了,這就是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){};
有沒有辦法在A中創建一個只能調用一次的方法? – James
@James,不太清楚你想達到什麼目的,但是肯定 - 創建一個類的布爾成員,在構造函數中將其初始化爲false,在方法中檢查它,如果它爲true,則失敗,將其設置爲true方法。 –