朋友c ++不与私人成员合作

时间:2018-05-15 11:55:41

标签: c++ friend

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

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;          ^

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

friend允许代码访问其他无法访问的名称。但是,访问成员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;
}