Re: [問題] class中 private 宣告其他class的物件꘠…

看板C_and_CPP作者 (我要加入劍道社!)時間16年前 (2009/12/28 11:09), 編輯推噓2(201)
留言3則, 1人參與, 最新討論串2/4 (看更多)
看過了 你的 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

12/28 11:21, , 1F
感謝原PO花時間講解@.@ 所以說每個cpp有用到哪個.h檔就
12/28 11:21, 1F

12/28 11:21, , 2F
包函那個檔以及其他可能會用到的檔就好了嗎??
12/28 11:21, 2F

12/28 11:24, , 3F
另外,是否所有的.h檔最好都加__XX_H__ 以避免重複定義?
12/28 11:24, 3F
文章代碼(AID): #1BE25Hdw (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BE25Hdw (C_and_CPP)