2010-07-06 107 views
7

我正在做一個遊戲,我有一個叫做Man的類和一個叫做Block的類,他們都需要對方的代碼,但它們都在單獨的文件中。有沒有辦法「預定義」一個班級?像Objective-C的@class宏一樣?C++:兩個需要彼此的類

+2

聽起來像你想要的是一個前瞻性聲明。 – mooware 2010-07-06 20:37:22

+0

BlockDude +1。 – 2010-07-06 22:42:46

回答

5

它被稱爲循環依賴。在課堂上Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

,並在類One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

的 「一類;」和「二級」;指令分別分配一個類名「One」和「Two」;但他們沒有定義超出名稱的任何其他細節。因此,您可以創建指針類,但不能包括整個類,像這樣:

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

上面兩個例子就不能編譯的原因是因爲當編譯器知道有一類一,這不是」 t知道可能包含哪些字段,方法或虛方法,因爲只定義了名稱,而不是實際的類定義。

11

是的。

class Man; 

這將聲明Man爲「不完整類型」。您可以聲明它的指針或引用以及其他一些內容,但不能創建實例或訪問它的成員。這不是一個完整的描述,你可以做什麼,不能做一個不完整的類型,但這是一般的想法。

+1

需要注意的是,您可以繼續並在以後包含完整類型並獲得訪問權限。您可以在標題中使用不完整的類型,然後將完整的標題定義包含在cpp中以利用它。 – 2010-07-06 20:41:17