c++ - 使用参数初始化另一个类构造函数中的对象

标签 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();
}

并且,这里是文件 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/

相关文章:

c++ - 带有模板参数的构造函数

ruby - 在构造函数中使用 splat 运算符是否有效?

C++ 从 'const char*' 到 'char' 的无效转换

c++ - 指向指针函数的函数指针

c++ - 将回调函数移动到类会导致错误!

php - FB如何创建FBML?

java - 直接从没有 Java 端的 C++ 进程从 jni 调用 android Activity

c++ - 在 Centos 中编译的 nWipe 软件包无法在 Busybox 嵌入式 linux 中运行

java - 在最后一个构造函数结束后调用方法

c++ - 非静态成员函数的无效使用 - Arduino - Automaton