2010-09-15 147 views
6

現在我有一個類A繼承自類BB沒有默認的構造函數。我嘗試創建A一個構造函數,對B的構造完全相同的參數,但我得到:從類繼承的類沒有默認的構造函數

error: no matching function for call to ‘B::B()’ 
note: candidates are: B::B(int) 

我將如何解決這個問題?

+0

請發表您的當前代碼 – 2010-09-15 01:59:28

+0

@Ramon Zarazua - 爲什麼?我已經得到了答案... – wrongusername 2010-09-16 18:04:14

回答

14

構造應該是這樣的:結腸裝置

A(int i) : B(i) {} 

位後,「使用其int構造初始化該對象的乙基類的子對象,具有i的值」。

我猜你沒有爲B提供初始化程序,因此默認情況下編譯器會嘗試用不存在的無參數構造函數初始化它。

+0

感謝您解釋這是什麼意思,史蒂夫!我沒有意識到有一個初始化器 – wrongusername 2010-09-15 02:05:41

2

你需要通過你的類的初始化列表調用基礎構造函數。

例子:

class C : public B 
{ 
public: 
    C(int x) : B(x) 
    { 
    } 

}; 

當你不初始化乙明確它會嘗試使用的是沒有參數的默認構造函數。