Не работает дружественная функция

167
02 февраля 2018, 22:20

В книге Герберта Шилдта используется такой пример :

#include <iostream>
using namespace std;
const int IDLE=0;
const int INUSE=1;
class С2; // опережающее объявление
class C1 {
  int status; // IDLE если сообщение неактивно, INUSE если сообщение выведено на экран.
  // ...
 public:
  void set_status(int state);
  friend int idle(C1 a, C2 b);
};
class C2 {
  int status; // IDLE если сообщение неактивно, INUSE если сообщение выведено на экран.
  // ...
 public:
  void set_status(int state);
  friend int idle(C1 a, C2 b);
};
void C1::set_status(int state)
{
 status = state;
}
void C2::set_status(int state)
{
 status = state;
}
// Функция idle() - "друг" для классов C1 и C2.
int idle(C1 a, C2 b)
{
 if(a.status || b.status) return 0;
 else return 1;
}
int main()
{
 C1 x;
 C2 y;
 x.set_status(IDLE);
 y.set_status(IDLE);
 if(idle(x, y)) cout << "Экран свободен.\n";
 else cout << "Отображается сообщение.\n";
 x.set_status(INUSE);
 if(idle(x, y)) cout << "Экран свободен.\n";
 else cout << "Отображается сообщение.\n";
 return 0;
}

Компилятор выдает, что невозможно обратиться к private члену, объявленному в классе C1, хотя функция idle объявлена дружественной. Ошибку выдает в определении функции idle вот в этой строке status возле a. подсвечивается красным :

if (a.status || b.status) return 0;

В чем ошибка и как это исправить?

READ ALSO
Присвоение в описании класса

Присвоение в описании класса

В какой момент времени во время исполнения произойдет присвоение int a = 5?

178
Ошибка в работе со стеком LUA из C++

Ошибка в работе со стеком LUA из C++

ПриветствуюРаботаю со скриптом LUA и C++

178
Периодически вызываемый GetProcessTime выдаёт одно и то же значение

Периодически вызываемый GetProcessTime выдаёт одно и то же значение

Добрый деньПоставил перед собой задачу написать маленький органайзер, отслеживающий как долго работают те или иные окна, сделал через отслеживание...

178