我正在尝试将一段 C++ 代码重构为一个类。现在代码看起来像这样
USB Usb;
ACMAsyncOper AsyncOper;
ACM Acm(&Usb, &AsyncOper);
我想将这段代码移到类的构造函数中。我还想将变量 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);
}
但这似乎行不通。我是 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
.
并且将主体留空,因为没有理由在构造函数中重新创建 Usb
和 AsyncOper
数据成员。此外,执行 ACM Acm(&Usb, &AsyncOper)
可能会导致未定义的行为,因为您正在访问局部变量的地址,当构造函数主体关闭时,这些地址将超出范围。如果您在其他地方使用这些地址将导致未定义的行为。
关于c++ - 在 C++ 中将另一个类作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874943/