-1
class B;
class A
{
B b;
A();
};
class B
{
A a;
B();
};
我有兩個類,如下所示。出於某種原因,即使我轉發申報B類,我有一個錯誤,說:基本正向聲明不起作用
field 'b' has an incomplete type!
爲什麼會出現這種情況?
class B;
class A
{
B b;
A();
};
class B
{
A a;
B();
};
我有兩個類,如下所示。出於某種原因,即使我轉發申報B類,我有一個錯誤,說:基本正向聲明不起作用
field 'b' has an incomplete type!
爲什麼會出現這種情況?
當您聲明一個類的實例時,由於編譯器需要知道它的大小,因此需要完全定義該類。
如果你只是聲明瞭一個指針或參考則編譯器只需要符號名。
因此,如果您將A::b
更改爲指針(即B* b
)或參考(B& b
),那麼它將起作用。
您是否應該使用至少一個成員的指針/引用? (目前,你的課程將有無限大小)。 – Jarod42
詢問爲什麼在這種特殊情況下前向聲明不起作用與「您能解釋」前向聲明「進一步嗎?」還是「我何時可以使用前向聲明?」不一樣?您可以標記爲重複一個真正的複製像這樣一個'http:// stackoverflow.com/questions/20202231/slaying-the-circular-dependence',它實際上包含一個技術答案(爲什麼它不能工作?:答案1)和概念答案(爲什麼這永遠不能被允許工作?答案2)。如果您打算通過標記爲重複來阻止任何答案,請花時間鏈接實際重複 – Guiroux