【发布时间】:2021-01-02 09:57:08
【问题描述】:
我尝试使用友元函数访问 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,但没有帮助..
这是什么原因造成的?
【问题讨论】:
-
它无法编译,因为
A::func()未声明。但是请不要在生产代码中写这样的东西所有人都会讨厌你。如果要了解朋友在做什么,那没关系...但是您几乎不需要那个...我看到的最实际的事情是当您需要实现operator<<和operator>>时。其他情况很可能是糟糕的代码设计 -
无关,但请注意
func()正在修改传递给它的X对象的副本。原始X对象未修改。如果需要,请通过引用传递它:void func(X &x1)
标签: c++ friend friend-function