朋友类,互相指针

时间:2010-12-16 12:20:36

标签: c++ class friend

如何创建两个具有成员指向彼此类类型的类,并且可以完全访问彼此的数据?换句话说,我需要两个这样的类:

class A
{
protected:
   B *p;
};

class B
{
protected:
   A *p;
};

我遇到了麻烦,因为我不符合C ++约定,显然,A类不能声明B类,因为B稍后在代码中声明。

感谢您的帮助

7 个答案:

答案 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类存在于某处”。