【问题标题】:C++ member functions as friendsC++ 成员函数作为朋友
【发布时间】: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


【解决方案1】:

F 不需要是虚拟的吗?我可能是错的。

【讨论】:

  • 不是 dv,但不是,将 Y::f(X*) 设为虚拟不会有任何区别。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2021-08-16
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多