使用参数在另一个类构造函数中初始化对象

时间:2014-01-23 01:10:00

标签: c++ constructor arduino

我正在Arduino中创建一些项目。 并且,我坚持以下问题。

标题文件B.h

中有一个B类
class B {
  private:
    int n;
  public:
    B(int);
    init();
}

然后,头文件A.h

中有一个A类
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?

那么,为什么编译器仍然使用默认构造函数?

1 个答案:

答案 0 :(得分:4)

您需要在构造函数之前初始化成员 。 b成员构造函数必须在A之前调用。因此,您在成员之外调用它。

将A类构造函数更改为:

#include <B.h>
A::A():b(3) {
}

修改

如果不调用初始化,则调用默认构造函数。但是B类没有默认构造函数,这就是你得错的原因。