2011-02-06 54 views
1

我有三個類:一個TopClass其中包含一個BottomClass指針的實例。 BottomClass包含指向HelperClass的指針。 HelperClass保持指向TopClass的指針。循環依賴項彈出,並且HelperClass需要前向聲明。爲什麼前向聲明不能修復循環依賴?

所有這一切都說明用下面的代碼片段:

#include "BottomLevel.h" 

namespace foo 
{ 
    class TopLevel 
    { 
    private: 
    BottomLevel* item; 
    }; 
} 

-

#include "HelperClass.h" 

namespace foo 
{ 
    class BottomLevel 
    { 
    private: 
    HelperClass* item; 
    }; 
} 

-

class TopLevel; // forward declaration here 

namespace foo 
{ 
    class HelperClass 
    { 
    public 
    HelperClass(TopLevel* item); 
    }; 
} 

試圖做的事情在執行文件時,問題來。如果我在cpp文件中使用#include "TopClass.h",則會出現編譯錯誤,指出「找不到重載成員函數 - 使用未定義類型'TopLevel'」(錯誤C2511和C2027)。

然後,如果我不做#include我仍然留下C2027錯誤,因爲我嘗試使用正向聲明類型。

我只知道有一種方法可以解決這個問題,我確信我以前做過,但是我無法記住我應該做的事情。請幫忙嗎?

回答

6

問題是,您正在向foo命名空間外面的TopLevel聲明,所以編譯器從未找到類foo::TopLevel

嘗試在foo名稱空間內移動TopLevel的前向聲明。

+0

/捂臉 - 你的先生,玷污了我。謝謝! – Anthony 2011-02-06 03:06:15

0

您需要的形式

namespace foo { 
class TopLevel; 
class BottomLevel; 
class HelperClass; 
} 

的向前聲明之後的順序不會不管[因爲你使用指針]

+6

在下週收聽Stack Overflow的另一個令人興奮的劇集,Shynthriir在那裏發現他必須放的東西! – Maxpm 2011-02-06 03:05:48