Друг с ++ не работает с частными участниками - PullRequest
0 голосов
/ 15 мая 2018

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

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: error: 'int A :: a' является частной в этом контексте b.abc.a = 0;^ test.cpp: 7: 7: примечание: здесь объявлено закрытым int a;^

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 15 мая 2018

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;
}
...