2014-01-23 64 views
0

我在Arduino中創建了一些項目。 而且,我遇到以下問題。使用參數初始化另一個類構造函數中的對象

有一個在頭文件中的B類B.h

class B { 
    private: 
    int n; 
    public: 
    B(int); 
    init(); 
} 

然後,有在頭文件中A類A.h

class A { 
    private: 
    B b; 
    public: 
    A(); 
    init(); 
} 

而且,這裏的文件A.cpp

Class A構造函數定義
#include <B.h> 
A::A() { 
    b(3); 
} 

這是給我的錯誤

../A.cpp: In constructor 'A::A()': 
../A.cpp:12: error: no matching function for call to 'B::B()' 
note: candidates are: B::B(int) 

我想,這是因爲我沒有在class B定義的默認構造函數(不帶參數)。

但是,有沒有我初始化對象b在class A構造函數與參數3?

然後,爲什麼編譯器仍然是默認構造函數?

回答

4

您需要初始化構造函數之前的成員。必須在A之前調用b成員的構造函數,因此你可以在成員之外調用它。

更改類的構造函數這樣:

#include <B.h> 
A::A():b(3) { 
} 

編輯

,如果你不調用初始化,默認構造函數被調用。但B類沒有默認的構造函數,這就是爲什麼你有錯誤。

+0

哇,這工作。但請解釋一下這是什麼樣的說法?而且,它是如何工作的。我從來沒有遇到像這樣的陳述。 – Akshat

+0

查看頂部的編輯 – SHR

+0

那麼,這個聲明有沒有任何名字?你會怎麼稱呼它? – Akshat

相關問題