2010-11-05 78 views
1

我正在爲遊戲引擎製作基於組件的實體系統。C++:概念性循環包含問題

我有一個實體類,其具有包括所述部件基類報頭,以限定組件數組private Component* components[ 123 ]

然而,在部件基類我必須定義一個private Entity* ownerEntity,怎麼一回事,因爲它是至關重要一個組件知道它屬於誰!

這導致Entity.h需要Component.h,反之亦然 - >循環引用

我該如何解決這個問題?

回答

10

只要你只需要你的類包含指針引用其它類別,你可以跳過真正的包含文件,並使用一個空着的聲明像class Component;

您將需要源文件中的完整包含,在該文件中取消引用指針或使用引用調用Component上的方法。

+0

*真的嗎?*太棒了! – Ricc 2010-11-05 22:05:40

+2

事實上,因爲在這兩個類中你只需要指針,所以你可以(應該!)前向聲明依賴項,而不是將它們包含在兩個頭中。在這種情況下,這兩個標題都不應該依賴於另一個;這將使編譯時間超快。沖洗並重復所有其他參考,指針和它們的const對應每個類。 **另外**:閱讀[Herb Sutter關於編譯時依賴關係的解釋](http://www.gotw.ca/gotw/007.htm)。 – wilhelmtell 2010-11-05 22:15:02

+0

你可以把這個想法做得太過分 - 我曾經「巧妙地」向前聲明auto_ptr ,所以我可以有一個非常低級的類包含一個很少使用的toString()方法,返回auto_ptr 。這意味着你需要'#include '無論你在哪兒做*調用它,並且如果你不這樣做的話,你從gcc得到的錯誤很難直觀。 – 2010-11-05 22:15:49