В книге Герберта Шилдта используется такой пример :
#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;
В чем ошибка и как это исправить?
Виртуальный выделенный сервер (VDS) становится отличным выбором
В какой момент времени во время исполнения произойдет присвоение int a = 5?
Добрый деньПоставил перед собой задачу написать маленький органайзер, отслеживающий как долго работают те или иные окна, сделал через отслеживание...