在c++中拥有另一个类作为类成员
Having another class as a class member in C++
我正在尝试将一段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++-我可以创建另一个类的成员并在构造函数中使用它吗
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 没有公共构造函数作为另一个类模板成员的类模板
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 如何使用另一个类中的公共成员函数作为参数调用线程
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 使用指向成员函数的指针在另一个类中调用类构造函数
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 在C++中,是否可以"overload"作为另一个类成员的对象?
- C++ - 非静态 void* 成员,指向具有相同地址但不同值的不同对象的另一个非静态成员
- 如何检查一个模板是否是另一个模板的类成员
- 如何在另一个类中使用类成员的正确方法?