Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中有另一个类作为类成员+; 我试图把一段C++代码重构成一个类。现在代码是这样的 USB Usb; ACMAsyncOper AsyncOper; ACM Acm(&Usb, &AsyncOper);_C++_Class_Constructor - Fatal编程技术网

在C+中有另一个类作为类成员+; 我试图把一段C++代码重构成一个类。现在代码是这样的 USB Usb; ACMAsyncOper AsyncOper; ACM Acm(&Usb, &AsyncOper);

在C+中有另一个类作为类成员+; 我试图把一段C++代码重构成一个类。现在代码是这样的 USB Usb; ACMAsyncOper AsyncOper; ACM Acm(&Usb, &AsyncOper);,c++,class,constructor,C++,Class,Constructor,我想将此代码移动到类的构造函数中。另外,我希望将变量Usb、AsyncOper和Acm作为类的成员变量 我是这样写的 // eZ430.h class eZ430 { public: eZ430(); private: USB Usb; ACMAsyncOper AsyncOper; ACM Acm; }; // eZ430.cpp #include "eZ430.h" eZ430::eZ430()

我想将此代码移动到类的构造函数中。另外,我希望将变量
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:在“&”标记之前预期的标识符

当我把它改成

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

我得到一个错误,调用“ACM::ACM()”时没有匹配的函数。

您的构造函数应该通过其成员初始值设定项列表初始化
ACM

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

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


相关:

您的构造函数应通过其成员初始值设定项列表初始化
Acm

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

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


相关:

您是否收到任何错误?告诉我们它们是什么。你想做的事情——将对象作为另一个类的成员变量——通常是可能的,但可能涉及到的类中有一些东西使它无法工作。另外,您绝对不应该在构造函数中将所有数据成员重新声明为局部变量。@0x499602D2用我得到的错误更新了问题。您得到任何错误吗?告诉我们它们是什么。你想做的事情——将对象作为另一个类的成员变量——通常是可能的,但可能涉及到的类中有一些东西使它无法工作。另外,您绝对不应该将所有数据成员重新声明为构造函数中的局部变量。@0x499602D2用我得到的错误更新了问题。为了进一步说明,我猜Acm没有默认构造函数。这就是为什么成员初始值设定项是必要的。不仅没有理由在构造函数中重新创建数据成员,而且它实际上是错误的:数据成员最终被默认初始化,或者更糟糕的是,被指向立即超出范围的局部数的指针初始化,从而武装起一个未定义的行为炸弹,我猜INT Acm没有默认构造函数。这就是为什么成员初始值设定项是必要的。不仅没有理由在构造函数中重新创建数据成员,而且它实际上是错误的:数据成员最终被默认初始化,或者更糟糕的是,初始化时使用指向立即超出范围的局部变量的指针,从而触发了一个未定义的行为炸弹。
eZ430() : Acm(&Usb, &AsyncOper)
{}