Sud*_*dar 0 c++ constructor class
我正在尝试将一段C++代码重构为一个类.现在代码看起来像这样
USB Usb;
ACMAsyncOper AsyncOper;
ACM Acm(&Usb, &AsyncOper);
Run Code Online (Sandbox Code Playgroud)
我想将此代码移动到类的构造函数中.此外,我想拥有变量Usb,AsyncOper并Acm作为类的成员变量.
我把它写成如下
// 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()'
您的构造函数应该Acm通过其成员初始化列表初始化:
eZ430() : Acm(&Usb, &AsyncOper)
{}
Run Code Online (Sandbox Code Playgroud)
我们这样做是因为ACM没有默认的构造函数,我们必须确保默认构造eZ430导致了专门的构造Acm.
并且将主体留空,因为没有理由在构造函数中重新创建Usb和AsyncOper数据成员.此外,ACM Acm(&Usb, &AsyncOper)由于您正在访问构造函数体关闭时将超出范围的局部变量的地址,因此可能会导致未定义的行为.如果您在其他地方使用那些会导致未定义行为的地址.
相关:C++成员初始化列表