2014-10-12 74 views
2

正如我已經在我的程序上工作,我已經到了一個點,我有大約30多個頭文件。我該如何處理大量的頭文件?

當我開始,我有一個全功能於一身的標題鏈接到我做了迄今爲止所有的頭文件,以及我所需要的項目庫。

使用此格式,我不得不採取5+分鐘,以便僅通過改變一個變量名或一些其他類似的小重新編譯整個程序作爲一個整體。

我以前的計劃是製作所有標題的「層列表」,其中最基本的標題在底部,下一級標題需要這些標題,等等等等,直到我到達main.cpp文件。 (第2層需要最高的第1層等)。在這個想法之後,我最終偏向於製作文件夾組,並且如果我需要該目錄中的所有內容,則有一個Folder.hpp文件。現在

編譯時,我立即不知所措語法錯誤說,沒有什麼是適當地包括,當包括命令在我的面前坐着的權利。

以下是一些頭,按語法錯誤之一:

===Character.hpp=== 
#include "../../Pre.hpp" 
#include "../Assets/Folder.hpp" 
#include "../Control/Folder.hpp" 
#include "../WorldObj.hpp" 

===Control/Folder.hpp=== 
#include "CommonStat.hpp" 
#include "DeathHandler.hpp" 
#include "EnergySys.hpp" 
#include "FactionHandler.hpp" 
#include "Interaction.hpp" 
#include "Warper.hpp" 
#include "WeaponPos.hpp" 

===WeaponPos.hpp=== 

struct WeaponPos{}; 
===Build Message=== 
Build Message: error: 'WeaponPos' does not name a type 

===NOTE=== 
The #include lines are the only (seemingly) important portions of the code. the 'struct WeaponPos' is only to show where it is located in terms of the syntax error. 

WeaponPos myWpnPos is a variable of Character忘了inlcude該說明。

什麼是正確有效地組織頭文件以便在編譯源文件時全部負責的好方法?我在Windows 7 64位上使用Code::Blocks和MinGW GCC 4.7。

+0

每個頭文件應包括'#include'它依賴的所有頭文件。 – Galik 2014-10-12 02:26:16

+0

如果是這樣的話,那麼我將不得不爲每個頭文件編寫超過20個#include文件,這些文件都位於複雜的位置。這個想法直到我意識到我總共有50個頭文件爲止 – Molma 2014-10-12 02:28:06

回答

1

這並不意味着解決了您的整個問題,但是值得了解它的存在並且它可能對您未來的設計決策實際上有所幫助。

之一的處理時間長的方式重新編譯由一個小的變化引起的PIMPL idion - 總體思路是有類的所有私有成員的獨立結構。該結構在頭文件中被前向聲明,並在該類的cpp文件中定義。因此,當您在私有結構中添加/重命名字段時,頭部根本不會改變,因此鏈接到它的其他頭部不必重新編譯。

Much better description with examples

另外重要的一點是不要製造包括頭的水平 - 一個而應包括頭只有在真正需要它們。這方面的好例子是前向宣言。如果Class1作爲Class2中的指針成員,則不必在Class2.h中實際包含Class1.h,通常只需轉發declare Class1即可,然後將該頭文件包含在Class2.cpp文件中 - 這可以減少重新編譯。

綜上所述:

  • 使用PIMPL
  • 向前聲明和包括CPP時,你可以
  • 不,當你不必
+0

如果我需要更改函數頭或類似的東西,這會如何反應?這聽起來更像是專門用於變量... – Molma 2014-10-12 02:37:25

+0

如果PUBLIC接口發生更改,則無法避免重新編譯,因爲在那種情況下,所有其他文件都必須現在瞭解這些更改。如果您更改PRIVATE實現的一部分,無論是函數還是類的字段,此方法都可以幫助您。 – lisu 2014-10-12 02:41:58

+0

我明白了......那麼你可能會了解其他組織的技巧嗎?如果真的沒有,那麼我只需要嘗試撤銷/重做8小時的重組......編輯:只是注意到你的改變。我想知道這可以延伸多遠,因爲我經常提前做這件事。 – Molma 2014-10-12 02:46:25