[問題] private 用到的 class 的 include 問題

看板C_and_CPP作者 (我)時間11年前 (2013/07/14 02:38), 編輯推噓0(009)
留言9則, 5人參與, 最新討論串1/1
C1,C2 這兩個class有如下關係: C1.h------ #ifndef _C1_H_ #define _C1_H_ class C1{ ... }; #endif ---------- C2.h------ #ifndef _C2_H_ #define _C2_H_ class C2{ ... private: C1 *m_pC1; ... }; #endif ---------- 而 C1.h 和 C2.h 在不同資料夾. 如果在程式中要用到 C2 class 就必須這樣寫: #include "C1.h" #include "C2.h" 如果把 #include "C1.h" 放到 C2.h 中, 又要在 compile 時指定 C1.h 的 including path 可是使用 C2 的程式根本不需要知道 C1 的 declaration 請問,有沒有什麼方法可以讓使用 C1 class 的程式只需要 #include "C1.h" 即可? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.94.191

07/14 03:01, , 1F
在 class C2 { 前一行寫 class C1; 請查 forward declaration
07/14 03:01, 1F

07/14 04:59, , 2F
感謝
07/14 04:59, 2F

07/14 11:44, , 3F
如果是template的話也能這樣寫嗎?
07/14 11:44, 3F

07/14 11:49, , 4F
一樣template<class T> C1;
07/14 11:49, 4F

07/14 15:51, , 5F
我看OGRE的作法是,每個文件都載入一個叫做prerequire的
07/14 15:51, 5F

07/14 15:52, , 6F
然後在裡面把會用到的主要物件全部宣告一遍(不是定義)
07/14 15:52, 6F

07/14 15:52, , 7F
這招在大程式裡面很常用嗎?
07/14 15:52, 7F

07/14 16:35, , 8F
像iostream這種肥得要命的東西就附了<iosfwd>
07/14 16:35, 8F

07/14 21:20, , 9F
喔喔,感謝資訊
07/14 21:20, 9F
文章代碼(AID): #1HuPwFFZ (C_and_CPP)