1 / 1 / 1
Регистрация: 22.09.2014
Сообщений: 36
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Создать объект внутри класса, который может вызывать функцию этого класса12.11.2014, 07:16. Показов 9114. Ответов 6
Метки нет (Все метки)
Ребята помогите уже несколько дней мучаюсь. Хочу сделать программу в консоле демонстрации работы лифта в здании 2 этажа. Сделал класс Кнопка и класс Лифт. Кнопка есть на этаже и кнопка есть в лифте. Так вот кнопка в лифте не хочет никак работать. В функцию buttonPress мы передаем ссылку на объект класса Лифт. И из этой функции уже вызываем функцию ComeGetMe объекта Лифт.В этом месте у меня ругается пишет expected и все. А чего ожидает не понятно. Кто подскажет в чем проблема?
Код ниже: Класс Лифт
Также создан класс этаж который включает в себя класс кнопку. Неужели никто не сталкивался с такой проблемой? Добавлено через 2 часа 25 минут Частично помогла такая конструкция в хедере лифта
Такое решение мне не нравиться потому что, я создаю объект лифт и хочу чтобы кнопки уже автоматически в этом объекте присутствовали, а не создавать еще отдельно кнопки. Тут форум для монологов похоже сам себе задаю вопросы и сам же отвечаю
0
|
12.11.2014, 07:16 | |
Ответы с готовыми решениями:
6
Создание статической функции класса, которая принимает экземпляр этого же класса как объект Индексация массива класса, через объект этого класса Статический указатель класса на объект этого же класса В конструктор класса передать объект этого класса |
16 / 16 / 6
Регистрация: 03.11.2014
Сообщений: 72
|
||||||
12.11.2014, 07:29 | 2 | |||||
Как минимум надо тут исправить
Если в классе есть конструктор отличный от конструктора по умолчанию то надо этот самый конструктор по умолчанию определить.
1
|
Вездепух
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
|
||||||
12.11.2014, 07:46 | 3 | |||||
Сообщение было отмечено Sergey271 как решение
Решение
Заголовочные файлы 'Buttons.h' и 'Lift.h' включают друг друга циклически. Сразу понятно, что получатся "непонятные" ошибки. Циклическое включение заголовочных файлов никогда не имеет смысла.
Именно это произошло в вашем случае. Циклическое включение "разрешилось" так, что 'Buttons.h' включился выше, а 'Lift.h' - ниже. В результате тип 'Lift' оказался неизвестным на территории 'Buttons.h' и компилятор ругается на него. В данном случае надо убрать из 'Buttons.h' включение 'Lift.h', а вместо этого просто поместить в 'Buttons.h' предварительное объявление класса 'Lift'
Остальные заголовочные файлы надо тоже проверить на предмет циклического включения. Возьмите за правило: заголовочные файлы в программе должны образовывать однозначную иерархию уровней. Заголовочные файлы более высокого уровня имеют право включать только заголовочные файлы более низкого уровня, но не наоборот. В данном случае класс 'Lift' напрямую содержит внутри себя подобъекты типа 'Buttons'. Это означает, что 'Buttons.h' имеет более низкий уровень, а 'Lift.h' - более высокий уровень. Следовательно запрещается включать 'Lift.h' в 'Buttons.h'. Включайте 'Buttons.h' в 'Lift.h', а в самом 'Buttons.h' обходитесь такими предварительными декларациями классов, как я показал выше. Добавлено через 4 минуты Что значит "надо определить"? Его "надо определить", если он нужен согласно замыслу автора кода. Но в данном случае он не нужен. Нигде в программе не используется конструктор по умолчанию класса 'Buttons'.
1
|
1 / 1 / 1
Регистрация: 22.09.2014
Сообщений: 36
|
|||||||||||||||||||||
12.11.2014, 08:59 [ТС] | 4 | ||||||||||||||||||||
"Пацаны вообще ребята!" заработало!
TheCalligrapher низкий тебе поклон все четко разжевал, теперь мне все ясно по предварительным описаниям классов, можно делать два класса включающие себя друг в друга. Cookie Monster тебе тоже спасибо за ответ. я попробовал так
0
|
16 / 16 / 6
Регистрация: 03.11.2014
Сообщений: 72
|
|
12.11.2014, 09:12 | 5 |
Ну да неправильно выразился.я бы такой простой конструктор написал сразу а если потом он потребуется то он уже есть
Ничто не мешает сделать по умолчанию кнопкой первого этажа :-Р Добавлено через 7 минут Хотя получится что это частный случай другого конструктора и скорее всего не нужен. в общем я был неправ
0
|
Вездепух
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
|
|
12.11.2014, 09:45 | 6 |
Ну в буквальном прямом смысле два класса не могут включать в себя друг друга. Такое взаимное включение, если бы оно было возможным, приводило бы к бесконечному рекурсивному включению и возникновению класса бесконечно большого размера.
Один класс может буквально содержать другой (как Lift содержит Buttons), но при этом последний может только ссылаться на первый через указатели или ссылки. Вот для того, который "ссылается через указатели или ссылки" достаточно только предварительного объявления того класса, на который он ссылается (как для Buttons достаточно только предварительного объявления Lift) Поэтому при разработке такой "зацикленной" системы классов надо всегда сначала принять решение, какой класс будет "главным" (т.е. сможет напрямую включать другие классы), а какой класс будет "второстепенным" (т.е. сможет только ссылаться на главный класс).
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
12.11.2014, 15:28 | 7 |
0
|
12.11.2014, 15:28 | |
12.11.2014, 15:28 | |
Помогаю со студенческими работами здесь
7
Может ли метод класса возвращать экземпляр этого же класса? Правда, что указатель класса-наследника не может указывать на объект класса-родителя? Можно ли создать объект класса с таким же именем как у самого класса? В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |