Re: [問題] class中 private 宣告其他class的物件꘠…
看過了
你的 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
12/28 11:21, 1F
→
12/28 11:21, , 2F
12/28 11:21, 2F
推
12/28 11:24, , 3F
12/28 11:24, 3F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 2 之 4 篇):