精華區beta Programming 關於我們 聯絡資訊
Style II 其實是多此一舉,結果是一樣的. 正確的概念應該是你必需要 include 你所需需要的檔,而且不能多 include, 要自給自足。 像你的 oooo8.h 裡的 class D 並沒有真正用到 B, 而是用到 B&, 所以只要 一個前置宣告就行了;真正用到 B 實體應該是在 oooo8.cpp 所謂 include 而且只 include 所需的檔,意思是: // A.h class A{}; // B.h class B{ void fun(); }; // C.h #include B.h class A; // 前置宣告 class C{ A* pA; // 不需 include A.h, 只需一個前置宣告 B b; // 需要 B 的實體,所以要 #include B.h void fun(); }; // C.cpp #include B.h #include A.h void C::fun(){ pA = new A; // 真正用到 A, 所以要 #include A.h b.fun(); // 用到 B, 所以要 #include B.h } // main.cpp #include B.h #include C.h int main() { B b; // 用到 B, #include B.h C c; // 用到 C, #include C.h, return 0; } 此例中即使 C.h 已經 #include B.h,但我們仍要再將 B.h 引入,不能 依靠 C.h 已經引入 B.h 這件事,否則哪天 C.h 有所修改,不再需要引 入 B.h, 而這個修改竟會導至 main.cpp compile 不過,並不合理. 總之,每個編譯單元自給自足,就不會因為過高相依性的問題而導至某 些檔案莫名奇妙的 compile 過,某天又突然不過的問題。當然相依性太 高還會導至其他問題就是了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.19.235 ※ 編輯: avhacker 來自: 140.123.19.235 (12/21 23:50)