【发布时间】:2017-05-02 19:21:25
【问题描述】:
f 是 struct Y 的成员函数,在 struct X 中声明为友元。为什么 f 不能按预期访问 X 的私有成员?
请帮助我了解如何有效地使成员函数成为朋友。我很容易找到作为朋友的全局函数的可访问示例,但不是成员函数。
struct X;
struct Y {
void f(X* a);
};
struct X {
private:
int i;
public:
friend void Y::f(X* a);
};
void Y::f(X* x) {
x->i = 0; // Error: member "X::i" (declared at line 9) is inaccessible
}
【问题讨论】:
-
无法重现ideone.com/goHLoC你使用什么编译器?
-
为我工作 g++ 5.1.0
-
如果是visual studio,intellisense似乎确实会报错,但它应该可以正常编译。
-
对我来说没有意义。为
X创建一个公共访问器或让Y 成为X的朋友。对于松散耦合和可扩展架构,更喜欢公共访问器而不是朋友。 -
谢谢大家,我正在使用 Visual Studio。 @AlexG,特别感谢你。即使智能感知报告错误,我也没有意识到程序可以在 Visual Studio 中编译。请随时提交您的评论作为信用答案。
标签: c++ friend member-functions