我正在用 Arduino 创建一些项目。 而且,我遇到了以下问题。
头文件B.h
中有一个B类
class B {
private:
int n;
public:
B(int);
init();
}
然后,头文件A.h
中有一个类A
class A {
private:
B b;
public:
A();
init();
}
并且,这里是文件 A.cpp
中的 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 类没有默认构造函数,这就是你出错的原因。
关于c++ - 使用参数初始化另一个类构造函数中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297397/