我正在Arduino中创建一些项目。 并且,我坚持以下问题。
标题文件B.h
class B {
private:
int n;
public:
B(int);
init();
}
然后,头文件A.h
class A {
private:
B b;
public:
A();
init();
}
并且,这是文件Class A
A.cpp
构造函数定义
#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?
那么,为什么编译器仍然使用默认构造函数?
答案 0 :(得分:4)
您需要在构造函数之前初始化成员 。 b成员构造函数必须在A之前调用。因此,您在成员之外调用它。
将A类构造函数更改为:
#include <B.h>
A::A():b(3) {
}
修改强>
如果不调用初始化,则调用默认构造函数。但是B类没有默认构造函数,这就是你得错的原因。