如何创建两个具有成员指向彼此类类型的类,并且可以完全访问彼此的数据?换句话说,我需要两个这样的类:
class A
{
protected:
B *p;
};
class B
{
protected:
A *p;
};
我遇到了麻烦,因为我不符合C ++约定,显然,A类不能声明B类,因为B稍后在代码中声明。
感谢您的帮助
答案 0 :(得分:3)
你应该使用前瞻性声明。
//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
};
答案 1 :(得分:2)
class B;
class A {
friend class B;
protected:
B *p;
};
class B {
friend class A;
protected:
A *p;
};
请注意,实际使用B成员的A的任何成员函数都必须在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; }
答案 2 :(得分:1)
你必须使用前向声明,如:
class B;
class A{
...
friend class B;
};
答案 3 :(得分:1)
class A
{
protected:
class B *p;
};
如果你想宣布友谊,你需要一个前瞻声明:
class B;
class A
{
friend class B;
protected:
B *p;
};
答案 4 :(得分:1)
class B;
class A
{
protected:
B *p;
friend class B;
};
class B
{
protected:
A *p;
friend class A;
};
答案 5 :(得分:1)
您可以通过在A级以上class B;
进行前瞻性声明
答案 6 :(得分:1)
简单使用: B级;
class A
{
protected:
B *p;
friend class B;
};
class B
{
protected:
A *p;
friend class A;
};
使用B级;表示前向声明,这基本上告诉编译器:“B类存在于某处”。