2010-03-23 66 views
2

從我完成C++開始已經很長時間了,而且我正遇到一些引用對方的類的麻煩。如何聲明相互引用的類?

現在,我有這樣的事情:

class a 
{ 
    public: 
    a(); 
    bool skeletonfunc(b temp); 
}; 

BH

class b 
{ 
    public: 
    b(); 
    bool skeletonfunc(a temp); 
}; 

由於每一個需要另外一個參考,我發現我做不到一個#包括在頂部彼此,或者我最終在與包括的怪異循環。

那麼我怎樣才能讓a可以使用b,反之亦然,而不會產生週期性的#include問題?

謝謝!

回答

8

你必須使用Forward Declaration

class b; 
class a 
{ 
    public: 
    a(); 
    bool skeletonfunc(b temp); 
} 

然而,在許多情況下,這可以迫使你用你的方法調用或者成員變量的引用或指針工作,因爲你可以」在兩個類頭文件中都有完整的類型。如果必須知道類型的大小,則需要使用引用或指針。但是,如果只需要方法聲明,則可以使用該類型。

+1

請確保您注意,您需要參考使用指針或引用任何前瞻性聲明的類型,本例所示(B&溫度)。 – 2010-03-23 20:56:18

+6

不,原始聲明(帶有傳值語義)將被編譯。在方法定義之前,您需要完整的類聲明,但不要聲明方法簽名:'class a; void f(a); class a {}; void f(ax){...'參見http://stackoverflow.com/questions/389957/forward-declaration-of-a-base-class/390124#390124 – 2010-03-23 21:03:33

+0

@大衛:我編輯得更加明確。 – 2010-03-23 21:11:23