Друг С++ не работает с закрытыми членами

Я пытался создать дружеские отношения между двумя классами. Ниже приведен пример:

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: примечание: здесь объявлено как private int a; ^

Любая помощь приветствуется.


person sudo    schedule 15.05.2018    source источник
comment
B друг A, а не main.   -  person StoryTeller - Unslander Monica    schedule 15.05.2018


Ответы (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;
}
person Angew is no longer proud of SO    schedule 15.05.2018