首页 > 解决方案 > 好友会员功能无法访问私人会员数据

问题描述

我尝试使用朋友函数访问 X 类的私有成员数据,该函数本身是 A 类的成员函数。
代码如下:

class X {
    int foo;
public:
    friend void A::func(X x1);
};

class A {
public:
    void func(X x1) { x1.foo = 999; }
};

这不会编译,原因是:
Error C2248 'X::foo': cannot access private member declared in class 'X'

我尝试更改顺序,在 X 之前声明 A,但它没有帮助..
是什么原因造成的?

标签: c++friendfriend-function

解决方案


您必须正确拆分声明和定义,因为您有循环依赖:

class X;

class A {
public:
    void func(X x1);
};

class X {
    int foo;
public:
    friend void A::func(X x1);
};

void A::func(X x1) { x1.foo = 999; }

演示


推荐阅读