用参数初始化另一类构造函数中的对象



我正在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类没有默认的构造函数,这就是为什么您有错误。

最新更新