看板 C_and_CPP 關於我們 聯絡資訊
看過了 你的 include.h 真的很亂來 binTree.cpp 包含 include.h binTree.h 包含 include.h adrsQueue.h 包含 include.h include.h 包含 adrsQueue.h binTree.h 所以 compiler 在編 binTree.cpp 的時候順序是這樣: 1. 讀 binTree.cpp,看到第一行 #include "include.h" 2. 打開 include.h 讀進裡面指定的檔案 3. 讀到 adrsQueue.h 的時候,由第二行 #define 而定義 __ADRSQUEUE_H__ 這個符號 然後讀到第四行,再開一次 include.h 4. 因為 include.h 前面沒有 #define 所以會再被讀一次, 但 stdio.h, stdlib.h, math.h, define.h, adrsQueue.h 因為有 #define 的關係 不會重覆讀取 5. 於是 compiler 開始讀 binTree.h 不過還記得嗎,在第三步的時候 compiler 才讀到第四行 所以這時候 compiler 還沒讀到 adrsQueue 這個 class 的定義 6. 因為 binTree.h 內用到了 adrsQueue 這個 class 但 compiler 不知道它的定義,所以產生錯誤 所以要怎麼修改呢 答案是不要寫這種把所有檔案都包進來的 include.h 也許很方便沒錯 但首先它會產生如上所說的這個問題 而且當你的程式愈來愈大時 這樣做會導致你重編整個程式的時間大幅增加 而最重要的是 這樣做你很難去了解各模組之間的相依性 日後你要是想把某個功能獨立出來 或是想更改某些 implementation 你會發現整個程式碼像一團義大利麵一樣牽一髮動全身 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.108
liu2007:感謝原PO花時間講解@.@ 所以說每個cpp有用到哪個.h檔就 12/28 11:21
liu2007:包函那個檔以及其他可能會用到的檔就好了嗎?? 12/28 11:21
liu2007:另外,是否所有的.h檔最好都加__XX_H__ 以避免重複定義? 12/28 11:24