※ 引述《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