Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Александр_Алекс
7 / 4 / 4
Регистрация: 08.12.2013
Сообщений: 165
1

Не могу исправить error C2228: left of '.isWorked' must have class/struct/union

21.04.2016, 12:00. Просмотров 661. Ответов 2
Метки нет (Все метки)

Добрый день. Есть два взаимодружественных класса.Методом одного, меняю поля другого.
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Alarm; //класс сигнализации
 
class Lock{ //класс замка
private:
    bool isLocked; //закрыта ли  дверь
public:
    friend class Alarm;//объявление дружеского класса
    void initiateAlarm(Alarm& a){
        a.isWorked = true;
    }
    Lock(bool startState){//конструктор
        this->isLocked = startState; //начальное состяоние двери
    }
};
 
class Alarm{
private:
    bool isWorked;//сработала ли сигнализация
public:
    friend class Lock;//объявление дружеского класса
    Alarm (){
        isWorked = false; //изначально не сработала
    }
    void lock(Lock l){ //метод закрывающий дверь
        if (l.isLocked) cout<<"Дверь уже закрыта!"<<endl; //закрывааем дверь если она сработала
        else {
            l.isLocked = true;
            cout<<"Дверь успешно закрыта!"<<endl;
        }
    }
    void unlock(Lock l){ //метод открывающий дверь
        if (!l.isLocked) cout<<"Дверь уже открыта!"<<endl;
        else {
            l.isLocked = true;
            cout<<"Дверь успешно открыта!"<<endl;
        }
    }
 
};
Выдает ошибку error C2228: left of '.isWorked' must have class/struct/union в методе initiateAlarm на строке
C++
1
a.isWorked = true;
Самом собой, я погуглил. Нужно обращаться через -> . Обращаюсь, получаю IntelliSense: expression must have pointer type

Также, на этой же строке получаю другую ошибку error C2027: use of undefined type 'Alarm'
Это мне совершенно непонятно, т.к., я сделал опережающее объявление класса Alarm.

Будьте добры, помогите прояснить сию непонятную для меня ситуацию
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2016, 12:00
Ответы с готовыми решениями:

error C2228: left of '.add' must have class/struct/union type. в чем ошибка?
Помогите понять в чем ошибка. Пасиб. #include &lt;iostream.h&gt; class book {...

При компиляции ошибка: C2228: left of ".real",".imag" must have struct/class/union
Помогите, пожалуйста! Компилирую в VS2010... Ошибка: C2228: left of...

std::bind1st: is not a class, struct, or union type
Добрый день, пытаюсь найти элемент в списки указателей на объекты классачерез...

Ошибка компиляции "must have class/struct/union"
Здравствуйте. Возникают ошибки: Error 4 error C2228: left of...

Исправить ошибку error C2228:выражение слева от ".leght" должно представлять класс, структуру или объединение
Помогите исправить ошибку 1&gt;c:\users\maksimus\documents\visual studio...

2
avgoor
1042 / 610 / 157
Регистрация: 05.12.2015
Сообщений: 1,732
21.04.2016, 12:15 2
Александр_Алекс, Вынесите определение void initiateAlarm(Alarm& a) после определния класса Alarm
1
Александр_Алекс
7 / 4 / 4
Регистрация: 08.12.2013
Сообщений: 165
21.04.2016, 12:31  [ТС] 3
avgoor, да, это оно. Спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2016, 12:31

Error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::
Здравствуйте! Сразу попрошу прощения за тупой вопрос. Почему при перегрузке...

Union, struct
Здравствуйте! Помогите, пожалуйста, решить проблему. Есть строки: 1 2 3 4...

Union внутри struct
Добрый вечер! Мне нужно создать структуру с вариантной частью. Не получается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru