現在我有一個類A
繼承自類B
和B
沒有默認的構造函數。我嘗試創建A
一個構造函數,對B
的構造完全相同的參數,但我得到:從類繼承的類沒有默認的構造函數
error: no matching function for call to ‘B::B()’
note: candidates are: B::B(int)
我將如何解決這個問題?
現在我有一個類A
繼承自類B
和B
沒有默認的構造函數。我嘗試創建A
一個構造函數,對B
的構造完全相同的參數,但我得到:從類繼承的類沒有默認的構造函數
error: no matching function for call to ‘B::B()’
note: candidates are: B::B(int)
我將如何解決這個問題?
構造應該是這樣的:結腸裝置
A(int i) : B(i) {}
位後,「使用其int
構造初始化該對象的乙基類的子對象,具有i的值」。
我猜你沒有爲B提供初始化程序,因此默認情況下編譯器會嘗試用不存在的無參數構造函數初始化它。
感謝您解釋這是什麼意思,史蒂夫!我沒有意識到有一個初始化器 – wrongusername 2010-09-15 02:05:41
你需要通過你的類的初始化列表調用基礎構造函數。
例子:
class C : public B
{
public:
C(int x) : B(x)
{
}
};
當你不初始化乙明確它會嘗試使用的是沒有參數的默認構造函數。
請發表您的當前代碼 – 2010-09-15 01:59:28
@Ramon Zarazua - 爲什麼?我已經得到了答案... – wrongusername 2010-09-16 18:04:14