c++ - 在 C++ 中将另一个类作为类成员

标签 c++ class constructor

我正在尝试将一段 C++ 代码重构为一个类。现在代码看起来像这样

USB Usb;
ACMAsyncOper AsyncOper;
ACM Acm(&Usb, &AsyncOper);

我想将这段代码移到类的构造函数中。我还想将变量 UsbAsyncOperAcm 作为类的成员变量。

我是这样写的

// eZ430.h

class eZ430
{
    public:
        eZ430();    
    private:
        USB Usb;
        ACMAsyncOper AsyncOper;
        ACM Acm;
};


// eZ430.cpp
#include "eZ430.h"

eZ430::eZ430() {
    USB Usb;
    ACMAsyncOper AsyncOper;
    ACM Acm(&Usb, &AsyncOper);
}

但这似乎行不通。我是 C++ 的新手,无法让它工作。

请告诉我如何实现它。谢谢。

编辑:当我在构造函数中有以下代码时

eZ430::eZ430() {
    USB Usb;
    ACMAsyncOper AsyncOper;
    ACM Acm(&Usb, &AsyncOper);
}

我收到错误error: expected identifier before '&' token

当我把它改成

eZ430::eZ430() {
    USB Usb;
    ACMAsyncOper AsyncOper;
    ACM Acm(&Usb, &AsyncOper);
}

我收到错误 no matching function for call to 'ACM::ACM()'

最佳答案

您的构造函数应通过其成员初始化器 列表初始化Acm:

eZ430() : Acm(&Usb, &AsyncOper)
{}

我们这样做是因为 ACM 没有默认构造函数,我们必须确保 eZ430 的默认构造导致 的专门构造>Acm.

并且将主体留空,因为没有理由在构造函数中重新创建 UsbAsyncOper 数据成员。此外,执行 ACM Acm(&Usb, &AsyncOper) 可能会导致未定义的行为,因为您正在访问局部变量的地址,当构造函数主体关闭时,这些地址将超出范围。如果您在其他地方使用这些地址将导致未定义的行为。

相关:C++ Member Initialization List

关于c++ - 在 C++ 中将另一个类作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874943/

相关文章:

class - Maven fatal error 编译 : directory not found: maven-compiler-plugin

c++ - 如何在类构造函数中使用 C++11 随机引擎和均匀分布?

c# - 隐式传递参数给基本构造函数

c++ - 这是复制构造函数省略吗?

c++ - TCP 库正在捆绑消息?

java - 为什么 C++ 在拓扑排序上比 Java 慢?

c++ - apple mach o 链接器错误创建基本 AI CC 插件

.NET 类前缀和后缀命名约定

c++ - 如何在 C++ 中使用迭代器进行打印?

c++ - 如何在C++中进行相互类