我正在Arduino创建一些项目。而且,我遇到以下问题。
标题文件中有一个B类B.h
class B {
private:
int n;
public:
B(int);
init();
}
然后,标题文件中有一个A类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
中定义默认构造函数(没有参数)。
但是,我不是用参数3中的 class A
构造函数初始化对象b?
那么,为什么编译器仍在使用默认构造函数?
您需要在之前启动成员。B成员构造函数必须在A之前调用。因此,您将其称为会员外。
将A类构造函数更改为:
#include <B.h>
A::A():b(3) {
}
编辑
如果您不调用初始化,则调用默认构造函数。但是B类没有默认的构造函数,这就是为什么您有错误。