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

Sud*_*dar 0 c++ constructor class

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

USB Usb;
ACMAsyncOper AsyncOper;
ACM Acm(&Usb, &AsyncOper);
Run Code Online (Sandbox Code Playgroud)

我想将此代码移动到类的构造函数中.此外,我想拥有变量Usb,AsyncOperAcm作为类的成员变量.

我把它写成如下

// 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);
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.我是C++的新手,无法让它工作.

请告诉我如何实施它.谢谢.

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

eZ430::eZ430() {
    USB Usb;
    ACMAsyncOper AsyncOper;
    ACM Acm(&Usb, &AsyncOper);
}
Run Code Online (Sandbox Code Playgroud)

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

当我改变它

eZ430::eZ430() {
    USB Usb;
    ACMAsyncOper AsyncOper;
    ACM Acm(&Usb, &AsyncOper);
}
Run Code Online (Sandbox Code Playgroud)

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

0x4*_*2D2 5

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

eZ430() : Acm(&Usb, &AsyncOper)
{}
Run Code Online (Sandbox Code Playgroud)

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

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

相关:C++成员初始化列表