2010-06-28 43 views
0

比方說,我有兩個類:C++每個類依賴於第二個

class One { 
    Two *somevar = new Two; 
    // (...) 
}; 

class Two { 
    One *somevar = new One; 
    // (...) 
} 

而這是不可能的編譯類似的東西。如何處理它?

+2

@bta有正確的答案 - 所有你需要的是向前聲明。然而,這種「相互擁抱」對我來說總是一種代碼味道。我並不是說這是正確的,但我所說的是,以我個人的經驗來看,每當遇到這種情況時,就意味着我沒有仔細考慮過我的班級結構。通過重組班級,問題通常會消失。你有沒有考慮過你所擁有的不是一個編碼問題,而是一個設計問題? – Mawg 2010-06-29 00:24:17

回答

9

因爲所有你正在築巢是一個指針,嘗試:

class Two; 

class One { 
    Two *somevar = new Two; 
    // (...) 
}; 

class Two { 
    One *somevar = new One; 
    // (...) 
} 

通過前瞻性聲明類Two,你給編譯器足夠的信息,以便能夠建立內部One類的指針。如果你試圖自己嵌套類而不是指針,那麼就沒有辦法解決這個問題。

+1

+1。同樣在這種類型的僞代碼中,someVar的初始化需要在包含適當頭文件的cpp文件中出現,以便完整的類定義可用(新運算符需要)。 – stinky472 2010-06-28 22:55:37

+0

@ stinky472-一個很好的觀點,謝謝 – bta 2010-06-28 23:12:28

+0

@ stinky472,@bta,可以只做這個頭文件,但是你必須在構造函數中完成初始化,在聲明的外部定義。構造函數(確保標記爲內聯)對於'One'必須在定義'Two'後出現。 – 2010-06-29 00:53:21

0

我想我找到了解決辦法:

// class Type instead of Type 
// so: 
class Two *somevar = new class Two; 
相關問題