看板 C_and_CPP 關於我們 聯絡資訊
//a.h #ifndef A_H #define A_H class B; class A { public: A(); void print(){} private: B* _b; }; #endif //b.h #ifndef B_H #define B_H class A; class B { public: B(){} B(A* ptr); private: A* _a; } ; #endif //a.cpp #include "a.h" #include "b.h" A::A(){_b = new B(this);} //b.cpp #include "a.h" #include "b.h" B::B(A* ptr){ _a = ptr; _a->print(); } 主要就是不要讓他該看到class 宣告時 你卻讓他看不到 你一開始把function定義寫再a.h 用到了type B 卻只給他看class B;這名字 沒看到內容 所以才不過 上面這樣改是OK....但總覺得不是個好的設計耶 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.86.31
rockwalking:XD 真的是很爛的設計 06/19 01:32
rockwalking:但是已經寫成這樣了就懶得重新改寫架構 06/19 01:33
QQ29:主要是怕AB之間牽扯太深 改B,A行為可能會發生問題 搞的半死 06/19 01:37
tinlans:這種狀況在使用 visitor pattern 的時候還不算少見, 06/19 06:29
tinlans:最大的缺點就是你改一邊的 class 定義幾乎就是整個重編。 06/19 06:29
tinlans:解決這種編譯期相依性的方法往往都會吃到執行期的 CPU。 06/19 06:35
tinlans:所以最好從程式架構的設計上著手。 06/19 06:36