精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《chiu (愛睡的小孩)》之銘言: : 真是不好意思, : 這個問題大概是FAQ了吧 : 我想要兩個class, A 和 B 但是要 a has b, b has a,這時要怎麼做呢? : class A { : class B m_B; : }; : class B { : class A m_A; : }; : 可是在class A中,很顯然B是看不到的,所以連compiler過不會過的 : 請問要怎麼解決這個問題呢? class AA { // declare the same with class A }; class B { class AA *m_a; B(); ~B(); } class A : public AA { class B m_b; } class B::B() { m_a = new A; } class B::~B() { delete m_a; } -- ※ Origin: 程式設計樂園 ◆ From: c100.h202052114.is.net.tw > -------------------------------------------------------------------------- < 作者: hotball (哲哲魚) 看板: C_and_CPP 標題: Re: 請問有關cross referening 的問題 時間: Fri Jul 2 18:00:21 1999 ※ 引述《chiu.bbs@cszone.cc.ntu.edu.tw (愛睡的小孩)》之銘言: : 真是不好意思, : 這個問題大概是FAQ了吧 : 我想要兩個class, A 和 B 但是要 a has b, b has a,這時要怎麼做呢? : class A { : class B m_B; : }; : class B { : class A m_A; : }; : 可是在class A中,很顯然B是看不到的,所以連compiler過不會過的 : 請問要怎麼解決這個問題呢? : 如果reply時能mail給我更好,謝謝 先 declare class B: class B; class A { B* hello; }; class B { A* hello; }; 這樣就可以了。 -- ※ 發信站: 批踢踢實業坊(ptt.twbbs.org) ◆ From: kimicat.m1.ntu. > -------------------------------------------------------------------------- < 發信人: LCamel.bbs@cszone.cc.ntu.edu.tw (LCamel), 看板: C_and_CPP 標 題: Re: 請問有關cross referening 的問題 發信站: 程式設計樂園(CSZone) (Sat Jul 3 01:11:40 1999) 轉信站: Ptt!CSZoneNews!CSZone ※ 引述《qing (北原黎奈-課外授業)》之銘言: : ※ 引述《chiu (愛睡的小孩)》之銘言: : : 真是不好意思, : : 這個問題大概是FAQ了吧 : : 我想要兩個class, A 和 B 但是要 a has b, b has a,這時要怎麼做呢? : 加個 class B; 宣告在此 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 這樣不行呢. class B; class A { B b; }; class B { A a; }; 當 compiler 看到 A 時, 想要配置像 sizeof(B) 那麼大的空間給它. sizeof(A) = sizeof(B) + c1 但 sizeof(B) = sizeof(A) + c2 = sizeof(B) + c1 + c2 則 sizeof(B) 將無從決定起. (要給多少都可以?) 要解決的話, data member宣告成pointer或reference吧. class B; class A { B &b }; class B { A &a }; 既然pointer或reference的大小是固定的, compiler就不會遭遇前述的問題了. 從 "本日十大熱門遊樂設施" 跟來的 LCamel. -- ※ Origin: 程式設計樂園 ◆ From: h114.s241.ts31.hinet.net -- ※ Origin: 程式設計樂園 ◆ From: h114.s241.ts31.hinet.net