2016-06-09 23 views
0

我有一個2D見方的陸族/我的世界風格的遊戲,以下文件夾結構:C++需要包括頭許多目錄了

src/ 
- Backend/ 
- - Vector.hpp 
- World/ 
- - Elements/ 
- - - Mobs/ 
- - - - BaseMob.cpp 

正如你所猜,有大量的每個目錄內多個源文件。在BaseMob.cpp裏面我需要訪問src/Backend/Vector.hpp有沒有更清晰的方式來編寫#include "../../../Backend/Vector.hpp"(即#include "/Backend/Vector.hpp")或更好的方式來組織我的源文件夾中的文件?

下面是在源文件夾中的實際內容的一些更多的信息(大部分.cpp文件除外):

Backend/ # Anything specific to a particular platform 
- Vector.hpp 
- Graphics.hpp 
World/ # Anything about the whole game's world 
- Elements/ 
- - Mobs/ 
- - - BaseMob.hpp # Polymorphic base class 
- - - MobHandler.hpp # Manages all mobs in world 
- - - PlayerMob.hpp 
- - - WaterMob.hpp 
- - Block.hpp # Defines all possible blocks 
- - Inventory.hpp 
- - Furnace.hpp 
- World.hpp 
- WorldRenderer.hpp # Makes calls to Backend/graphics.hpp 
main.cpp 
+1

您可以使用makefile或更改系統路徑。 –

+0

以最合乎邏輯的方式組織文件,然後堅持引用它們的一致規則。例如,Google IIRC建議使用絕對路徑而不是相對路徑。有意義的,如果你移動文件很多,我更喜歡一個平衡,可能是一個上下水平相對其餘絕對... – Nim

+0

我可能會'#include「後端/ Vector.hpp」'但它取決於情況。 – drescherjm

回答

4

你可以考慮重新安排您的包括文件夾。這是一個可能的解決方案,但可能還不夠:當你開始使用第三方庫時,你將無法做到這一點......所以你需要一個更好的方法來解決這個問題。

乾淨的方法是將所需的文件夾(需要存儲頭文件的文件夾)添加到編譯器使用的「包含路徑」中,以便它可以找到它們。

然後,而不是#include "World/Elements/Mobs/BaseMob.hpp",添加World/Elements/Mobs到包括路徑,然後簡單地做#include "BaseMob.hpp"

如果您使用不同的編譯器/ IDE,它必須提供一個選項來執行此操作。

+0

爲了完整性,建議拋出一個像#include「World/Elements/Mobs/BaseMob.hpp」這樣的例子。 – user4581301

0

我建議避免在#include語句中放置路徑。如果文件移動,則必須更改所有源。

IMO,更好的方法是告訴編譯器在哪裏尋找包含文件。常見的命令行編譯器選項是「-I」(大寫字母i)。在IDE中,可能會有一個設置,您可以列出要搜索的所有路徑。

通過告訴編譯器在哪裏進行搜索,您可以在任何地方包含文件,並且可以移動,而且您不必更改源代碼。

+1

但是,這不是也打開了一罐蠕蟲嗎?通過使用-I,不會「World/Renderer.hpp」和Menu/Renderer.hpp產生問題嗎? –

+1

是的,不適用於不同目錄中具有相同名稱的文件。然而,我通常有獨特的文件名,例如'MenuRenderer.hpp'和'WorldRenderer.hpp',所以我沒有問題。 –