朋友 c++ 不与私人成员一起工作

Posted

技术标签:

【中文标题】朋友 c++ 不与私人成员一起工作【英文标题】:Friend c++ not working with private members 【发布时间】:2018-05-15 11:55:41 【问题描述】:

我试图在两个班级之间建立朋友关系。以下是示例:

class A

public:
  int b;
private:
  friend class B;
  int a;
;

class B

  public:
  A abc;
;

int main ()

  B b;
  b.abc.b = -1;
  b.abc.a = 0;
  return 0;

编译时出现如下错误:

test.cpp:在函数“int main()”中:test.cpp:20:9:错误:“int A::a” 在此上下文中是私有的 b.abc.a = 0; ^ test.cpp:7:7: 注意:这里声明为私有 int a; ^

任何帮助将不胜感激。

【问题讨论】:

BA 的朋友,而不是main 【参考方案1】:

friend 允许 code 访问其他无法访问的名称。但是,访问成员a的代码在main中,而不是在B类中,所以它没有特殊的访问权限。

你需要这样的东西:

class B

  public:
  A abc;

  void set_abc_a(int i)  abc.a = i; 
;

int main ()

  B b;
  b.abc.b = -1;
  b.set_abc_a(0);
  return 0;

【讨论】:

以上是关于朋友 c++ 不与私人成员一起工作的主要内容,如果未能解决你的问题,请参考以下文章

在不使用朋友类的情况下访问私人成员[重复]

如何在没有“朋友”的情况下访问课外的私人数据成员? [重复]

为啥派生类的朋友不能使用受保护的成员?

“受保护的朋友”和“私人保护”有啥区别?

c++友元

CoffeeScript 中的私人成员?