c++成员函数做友元遇到的问题

成员函数不是已经声明 友元了吗 为什么仍然不能访问private里的数据的

img

img

麻烦各位看看 谢谢了!

换成 friend class goodgay;

你的class结构比较特殊,是相互引用。

如果先定义A,则B未定义,B的作用域不可用,B作用域下的成员函数就是非法的,不可用作友元。

如果先定义B,则A的类未定义,B不可以用A类对象做成员函数,但可以用A类的指针。

所以如果B的成员函数要引用A的私有成员,必须让class B成为class A的友元。

struct B;
struct A
{

  private:
    // friend struct B;  //可以,B的成员函数都可以引用A类对象的私有成员。
    friend void B::C(); //非法作用域
    int b = 0;
};

struct B
{
    void C();

  private:
    A p;
};

void B::C()
{
    int d = p.b;
}

int main()
{
    B gg;
    gg.C();
    return 0;
}

我也在学这个,老师让用下类外定义,但是我偷了懒复制了之前的代码,还是在类内定义要做友元的成员函数,就有了这个问题!!!
但是应该是类成员函数做友元的话,不能在类内定义函数,只能在类内声明函数,在类外定义。
可以参考这个http://www.codebaoku.com/it-c/it-c-241893.html