作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] class中 private 宣告其他class的物件꘠…
時間Mon Dec 28 11:09:02 2009
看過了
你的 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