2016-03-10 55 views
-1
class B; 

class A 
{ 
    B b; 
    A(); 

}; 

class B 
{ 
    A a; 
    B(); 
}; 

我有兩個類,如下所示。出於某種原因,即使我轉發申報B類,我有一個錯誤,說:基本正向聲明不起作用

field 'b' has an incomplete type! 

爲什麼會出現這種情況?

+0

您是否應該使用至少一個成員的指針/引用? (目前,你的課程將有無限大小)。 – Jarod42

+0

詢問爲什麼在這種特殊情況下前向聲明不起作用與「您能解釋」前向聲明「進一步嗎?」還是「我何時可以使用前向聲明?」不一樣?您可以標記爲重複一個真正的複製像這樣一個'http:// stackoverflow.com/questions/20202231/slaying-the-circular-dependence',它實際上包含一個技術答案(爲什麼它不能工作?:答案1)和概念答案(爲什麼這永遠不能被允許工作?答案2)。如果您打算通過標記爲重複來阻止任何答案,請花時間鏈接實際重複 – Guiroux

回答

0

當您聲明一個類的實例時,由於編譯器需要知道它的大小,因此需要完全定義該類。

如果你只是聲明瞭一個指針參考則編譯器只需要符號名。

因此,如果您將A::b更改爲指針(即B* b)或參考(B& b),那麼它將起作用。