Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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++_Class_Object_Constructor_Member - Fatal编程技术网

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

C++ 类中调用父构造函数的成员对象,c++,class,object,constructor,member,C++,Class,Object,Constructor,Member,在我的.h中,我有这样的东西: class Cbeckhoff_frontendDlg : public CDialogEx { // construction public: Cbeckhoff_frontendDlg(CWnd* pParent = NULL); //... //this is the member object I want to create Modul test; }; Cbeckhoff_fr

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



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



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()
    {
    //..
    };

我的.cpp如下所示:



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



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()
    {
    //..
    };


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

如果模块有一个默认构造函数,并且您不想使用另一个构造函数,那么以下内容已经足够了:

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) {}
编辑:对于分号,您不应在方法正文后使用分号:

class Foo {
    Foo() {
        // ...
    } // <- no semicolon

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

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

编辑 再看一遍你的代码,我想你没有看到一些错误。你说主类没有编译,因为modul没有定义。我想modul中也会有编译错误,说Cbeckhoff_frontendDlg没有定义。所以你可能没有编译modul文件,modul.h'文件中没有替代构造函数的声明。

如果我是你,我会仔细检查你认为正在编译的所有东西是否都是通过干净的构建来编译的。

你到底想做什么?你的第二个构造函数应该尽我所能完成你想做的事情……我只想创建一个成员对象。他抱怨Modul没有定义,他假设int,但创建一个完全不同的类,没有父构造函数的调用,我可以生成我的测试对象module(){};~module(){};module(int-ID,Cbeckhoff_-frontendDlg*pcbekhoff,void*pVar,PAmsAddr-pAdr){SetID(ID);plcVar=pVar;pAddr=pAdr;};我有一个没有参数的默认构造函数,还有一个有一些参数,即使我使用默认构造函数,它也不起作用。他抱怨缺少一个semikolon或一个太多,但我很确定这是真的misleading@user1534683实际上,在两个构造函数的定义末尾都有一个额外的分号。@user1534683 BTW,如果您想继续nue收到社区的答案后,你最好开始投票并接受有用的答案。如果你是新手,你可以看一看。谢谢你的介绍。很遗憾,我不知道在哪里删除分号。@user1534683看看我更新的答案。希望在哪里使用s会更清楚emicolon和您不应该使用它的地方。我以前从未听说过转发声明,但在我看来,如果您的类有不同的头文件,那么它似乎是正确的方法。在我的例子中,类Modul与Cbeckhoff_frontendDlg::Cbeckhoff_frontendDlg(CWnd*pParent/*=NULL*/)位于相同的.h中但是,CdiAutoX有一个不同的地方。H文件有问题吗?C++中的文件的名称并不重要,只是把类放在同名文件中,这是一个好的做法。在一个类(在这种情况下,Modul)使用一个使用第一类(MODUL)的类(CbkkHofFFrhantDLLG)的指针时,使用正向声明。。您只需在“class Modul{”上面的一行键入语句“class Cbeckhoff_frontendDlg;”(不要键入引号并记住分号)。这“告诉”编译器,在链接所有对象文件之前,将在某处定义一个名为Cbeckhoff_frontendDlg的类。