如何創建兩個具有成員指向彼此類類型的類,並且完全訪問彼此的數據?換句話說,我需要兩個類是這樣的:朋友類互相指點
class A
{
protected:
B *p;
};
class B
{
protected:
A *p;
};
我與它有麻煩,因爲我沒有達到標準與C++約定,顯然,A類不能聲明一個類B,因爲B在代碼後面聲明。
感謝您的幫助
如何創建兩個具有成員指向彼此類類型的類,並且完全訪問彼此的數據?換句話說,我需要兩個類是這樣的:朋友類互相指點
class A
{
protected:
B *p;
};
class B
{
protected:
A *p;
};
我與它有麻煩,因爲我沒有達到標準與C++約定,顯然,A類不能聲明一個類B,因爲B在代碼後面聲明。
感謝您的幫助
您應該使用轉發類聲明。
//in A.h
class B; // forward declaration
class A
{
protected:
B *p;
friend class B; // forward declaration
};
//in B.h
class A; // forward declaration
class B
{
protected:
A *p;
friend class A; // forward declaration
};
class A
{
protected:
class B *p;
};
如果你想聲明的友誼,你需要預先聲明:
class B;
class A
{
friend class B;
protected:
B *p;
};
不值得downvote國際海事組織,但你實際上不需要*在第二個例子中單獨的前向聲明。你可以做'朋友類B'和'B類* p',並省略第一個'B類'。 – 2010-12-16 12:36:24
@Steve是的,你是對的。不知道我在那裏想什麼。 – 2010-12-16 12:40:42
你可以使用正向聲明n做class B;
A級以上
簡單使用: 類B;
class A
{
protected:
B *p;
friend class B;
};
class B
{
protected:
A *p;
friend class A;
};
使用B類;意味着前向聲明,這基本上告訴編譯器:「類B存在於某處」。
class B;
class A {
friend class B;
protected:
B *p;
};
class B {
friend class A;
protected:
A *p;
};
注意,這實際上使用B的成員的任何成員函數將具有B的定義之後被定義,例如:
class B;
class A {
friend class B;
protected:
B *p;
A *getBA();
};
class B {
friend class A;
protected:
A *p;
};
A *A::getBA() { return p->p; }
C++是一個地方的朋友訪問你的私人會員。必須在此提及:P – jrharshath 2010-12-16 12:40:11
當然問題是:如果您有兩個如此緊密耦合的類,那麼您確定您的設計是正確的嗎?當然,聽起來你的班級邊界在某個地方是錯誤的。 – GrahamS 2010-12-16 13:33:57