调用其父构造函数的类中的成员对象

Member object in a class which calls it parential constructor

本文关键字:成员对象 构造函数 调用      更新时间:2023-10-16

在我的.h中,我有这样的东西:


class Cbeckhoff_frontendDlg : public CDialogEx
    {
    // construction
    public:
    Cbeckhoff_frontendDlg(CWnd* pParent = NULL);
    //...
    //this is the member object I want to create
    Modul test;
    };

我的.cpp看起来是这样的:


Cbeckhoff_frontendDlg::Cbeckhoff_frontendDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(Cbeckhoff_frontendDlg::IDD, pParent)
    {
    //..
    };
    //and should look like this:
    Cbeckhoff_frontendDlg::Cbeckhoff_frontendDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(Cbeckhoff_frontendDlg::IDD, pParent),test()
    {
    //..
    };

我把以前试图在这里发布的测试用例搞砸了,对此我很抱歉。我想我不太明白那里发生了什么。我假设Cbeckhof_frontendDlg启动父级CDialogEx构造函数,但我也想启动自己的构造函数测试。这可能吗?

如果Modul有一个默认构造函数,而您不想使用另一个构造函数,那么以下内容就足够了:

Cbeckhoff_frontendDlg::Cbeckhoff_frontendDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(Cbeckhoff_frontendDlg::IDD, pParent) {}

如果你想使用另一个构造函数(例如,一个接收整数的构造函数),你可以这样做:

Cbeckhoff_frontendDlg::Cbeckhoff_frontendDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(Cbeckhoff_frontendDlg::IDD, pParent), test(some_integer) {}

EDIT:至于分号,您不应该在方法体后面使用分号:

class Foo {
    Foo() {
        // ...
    } // <- no semicolon
    void bar() {
        // ...
    } // <- no semicolon
}; // <- at the end of a class you need a semicolon

如果我正确理解你的代码,你的Modul类有一个构造函数,它接受一个参数Cbeckhof_frontendDlg*,它有一个Modul类型的成员。您是否在Modul.h文件中转发声明了Cbeckhof_frontendDlg类?

编辑再次查看您的代码,我认为您没有看到一些错误。您说主类没有编译,因为modul是未定义的。我本以为Modul中也会有编译错误,说Cbeckhof_frontendDlg没有定义。因此,您可能没有编译Modul文件,或者"Modul.h"文件中没有替代构造函数的声明。
如果我是你,我会仔细检查你认为正在编译的所有内容是否正在通过干净的构建进行编译。