我試圖儘量減少頭項目包含在一個項目中,最大限度地使用正向聲明,並需要清楚C++編譯的過程如何工作。C++多文件編譯過程
它從我們分配對象A的main.cpp開始,因此我們包含A.h. A類使用B類和C類,所以我包括B.h和C.h.現在,如果我想在main.cpp中分配B,編譯將會失敗。
我很容易在main.cpp中包含B.h,但我想知道它是否真的有必要,因爲我已經包括A.h和A.h,我包括B.h.我閱讀了一些關於這個主題的討論,其中有關於源文件的遞歸和重新編譯的內容。那麼這究竟是如何工作的?
感謝您的任何建議。 :)
間接包含*是*包含。當你包含一個頭文件時,編譯器的行爲就好像頭文件的每一行都是文件的一部分。當您在標題中包含標題時,就好像您將該內部標題的每一行復制/粘貼到外部標題的每一行,並因此複製到每個包含它的文件中。如果編輯在您描述的情況下失敗,則其中一個標題已損壞。 (你可以創建一個簡短的,完整的,可編輯的破損示例嗎?) –
@DavidSchwartz:是的,沒有,預處理器設計用於檢測標頭警衛(和'#pragma once'聲明),並避免打開第二個頭文件時間。所以是的,理論上你是*再次包括文件,但實際上成本可以優化。 –
@David Schwartz:嗯,現在看來我只是需要重新編譯代碼,還有一些部分編譯的事情正在進行。我開始深入研究這個問題的原因是,我正在解決交叉問題 - 包括兩個類和一個朋友告訴我,他使用一個技巧,他包含一個頭文件,在這個包含的頭文件中,他只是使用前向聲明和包括cpp文件中的前一個類標題。所以我很困惑cpp文件在哪裏進來。 – Maci