2012-07-19 87 views
-2

在我的.h我有這樣的事情:會員對象,調用它parential構造



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

我搞砸了我試圖在這裏發表的前一個測試案例,我對此感到抱歉。我想我不太明白那裏發生了什麼。我假設Cbeckhoff_frontendDlg啓動了Paialntial CDialogEx-構造函數,但我也想開始自己的構造函數測試。那可能嗎?如果您想使用其他構造(例如,一個接收一個整數)

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

,您:

+1

你究竟想要做什麼?你的第二個構造函數應該盡你所能去做,盡我所能... – Goz 2012-07-19 13:21:48

+0

我只想創建一個成員對象。他抱怨Modul沒有定義,並且他認爲int,但是創建一個完全不同的類,但沒有這個parential構造函數的調用,我能夠生成我的測試對象 – womdom 2012-07-19 13:35:19

回答

0

如果Modul有一個默認的構造函數,你不希望使用另一個構造函數,以下是已經足夠了可以這樣做:

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 
+0

Modul(){}; 〜Modul(){}; (int ID,Cbeckhoff_frontendDlg * pCbeckhoff,void * pVar,PAmsAddr pAdr){SetID(ID); plcVar = pVar; pAddr = pAdr;};我有一個沒有參數的默認構造函數和一個帶有一些參數的默認構造函數,即使我使用默認構造函數,它也不起作用。他抱怨丟失的半角或太多,但我確信這是誤導性的 – womdom 2012-07-19 13:30:22

+0

@ user1534683在兩個構造函數的定義結尾處確實有額外的分號。 – betabandido 2012-07-19 13:33:07

+0

@ user1534683順便說一句,如果你想繼續從社區接收答案,你最好開始投票並接受有用的答案。如果你是新手,你可以看看[系統如何工作](http://stackoverflow.com/faq#howtoask)。 – betabandido 2012-07-19 13:36:27

0

如果我理解你的代碼正確,你的Modul類有一個構造函數,它的參數是Cbeckhoff_frontendDlg *,它有一個類型爲Modul的成員。 你有沒有在你的Modul.h文件中聲明Cbeckhoff_frontendDlg類?

編輯 再次查看您的代碼我認爲您還沒有看到一些錯誤。你說主類沒有編譯,因爲modul是未定義的。我原以爲在Modul中也會出現編譯錯誤,說Cbeckhoff_frontendDlg沒有被定義。所以它可能你沒有編譯Modul文件,'Modul.h'文件沒有替代構造函數的聲明。
如果我是你,我會仔細檢查你認爲正在編譯的所有東西IS正在編譯乾淨構建。

+0

我從來沒有聽說過前面的聲明,但是在我看來,如果你的類有不同的頭文件,那麼正確的路要走。在我的例子中,類Modul與Cbeckhoff_frontendDlg :: Cbeckhoff_frontendDlg(CWnd * pParent/* = NULL * /)在同一個.h中,但CDialogEx在另一個.h中是否有問題? – womdom 2012-07-19 14:31:21

+0

這些文件的名稱在C++中並不重要,它只是將類放入同名文件中的良好實踐。 前向聲明用於類(在本例中爲模塊)使用POINTER指向使用第一個類(Modul)的類(Cbeckhoff_frontendDlg)。所有你需要做的就是在上面的「class Modul {」中輸入語句「class Cbeckhoff_frontendDlg;」 (不要鍵入引號並記住分號)。這'告訴'編譯器有一個名爲Cbeckhoff_frontendDlg的類,它將在所有對象文件鏈接之前在某處定義。 – FredOrJoeBlogs 2012-07-20 06:57:05