![](/img/trans.png)
[英]Constructor to initialize base part of derived class by object of another derived class
[英]Initialize an object in another class constructor with arguments
我正在Arduino中創建一些項目。 而且,我陷入以下問題。
頭文件Bh
有B類
class B {
private:
int n;
public:
B(int);
init();
}
然后,頭文件Ah
有一個類A
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
定義默認構造函數(不帶參數)。
但是,是否沒有在class A
構造函數中使用參數3初始化對象b?
那么,為什么編譯器仍要使用默認構造函數?
您需要在構造函數之前初始化成員。 b成員構造函數必須在A之前調用。因此,您可以在成員外部調用它。
將類A的構造函數更改為此:
#include <B.h>
A::A():b(3) {
}
編輯
如果不調用初始化,則會調用默認的構造函數。 但是B類沒有默認的構造函數,這就是為什么會出錯的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.