3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
1

Ошибка при работе с объектом класса в конструкторе другого класса

29.10.2016, 17:37. Показов 659. Ответов 13
Метки нет (Все метки)

Имеется данный код: https://github.com/ubelian/glg... ter/glgame

В файле Food.cpp в конструкторе класса Food::Food() на 19 строке закомментировано обращение объекта snake класса Snake к методу getHeadCP();. Эта строка вызывает некую ошибку в процессе работы программы, которую понять я не могу. Если snake.getHeadCP() написать не в конструкторе, а в любом другом методе, то все работает нормально. Можно было бы подумать, что объект food класса Food создается раньше чем snake, но это не так. Прошу помощи
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2016, 17:37
Ответы с готовыми решениями:

Создание объекта класса с полем являющимся объектом другого класса
Bill a; cin>>a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у...

Инициализация объектов класса в конструкторе другого класса
У меня есть класс Subscriber,в котором есть несколько объектов другого класса Date,мне нужно,чтобы...

Ошибка при попытке использовать объект класса в определении другого класса
Муторное название получилось :scratch: Прошу помощи.... есть созданный класс работы со строкой:...

Ошибка при обращении из одного класса к методу другого класса
Структура проекта, 2 класса: класс графики MainWindow класс логики Сannibals при обращении из...

13
nd2
3426 / 2805 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
29.10.2016, 19:34 2
Цитата Сообщение от Sinkha Посмотреть сообщение
Эта строка вызывает некую ошибку
И как это выглядит?
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
29.10.2016, 19:49  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
И как это выглядит?
Привет. Выскакивает ошибка "Прекращена работа программы "glgame.exe" ".
0
nd2
3426 / 2805 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
29.10.2016, 19:59 4
Цитата Сообщение от Sinkha Посмотреть сообщение
Выскакивает ошибка "Прекращена работа программы "glgame.exe" ".
Больше ничего не пишет? В чём собираешь? Debug?

Добавлено через 4 минуты
Глобальные объекты Food есть?
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
29.10.2016, 20:12  [ТС] 5
Цитата Сообщение от nd2 Посмотреть сообщение
Глобальные объекты Food есть?
Есть. Я давал уже ссылку сверху на исходный код, может поможет. Не пойму в чем дело. По любому же ошибка банальная
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
29.10.2016, 20:15 6
Sinkha, у вас неправильный подход. Объекты классов Food и Snake определены как глобальные в разных единицах трансляции (в разных cpp-файлах). Стандарт языка не гарантирует порядок инициализации объектов в таких случаях.
0
nd2
3426 / 2805 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
29.10.2016, 20:16 7
Цитата Сообщение от Sinkha Посмотреть сообщение
Есть.
Если есть, то где гарантия, что он создаётся (а значит и конструктор вызывается) позже, чем глобальный snake?
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
29.10.2016, 20:38  [ТС] 8
Цитата Сообщение от castaway Посмотреть сообщение
Sinkha, у вас неправильный подход. Объекты классов Food и Snake определены как глобальные в разных единицах трансляции (в разных cpp-файлах). Стандарт языка не гарантирует порядок инициализации объектов в таких случаях.
Это объясняет уже пару вещей. А как правильно объеденить все эти определения в 1ой единице трансляции?
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
29.10.2016, 20:44 9
Цитата Сообщение от Sinkha Посмотреть сообщение
Это объясняет уже пару вещей. А как правильно объеденить все эти определения в 1ой единице трансляции?
Вы не поняли. Вам вообще следует избавиться от глобальных объектов.
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
29.10.2016, 20:52  [ТС] 10
Цитата Сообщение от castaway Посмотреть сообщение
Вы не поняли. Вам вообще следует избавиться от глобальных объектов.
Но мне нужно использовать snake в другом классе. Как мне быть?
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
29.10.2016, 20:56 11
Цитата Сообщение от Sinkha Посмотреть сообщение
Но мне нужно использовать snake в другом классе. Как мне быть?
Что вам мешает передать объект одного класса в конструктор/метод другого?
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
29.10.2016, 21:21  [ТС] 12
Цитата Сообщение от castaway Посмотреть сообщение
Что вам мешает передать объект одного класса в конструктор/метод другого?
Кстати да. Но я задавался первоначально целью по максимуму все инкапсулировать, чтобы подключил хедеры и РАЗ! и все заработало.
0
Комп_Оратор)
Эксперт по математике/физике
8733 / 4466 / 599
Регистрация: 04.12.2011
Сообщений: 13,315
Записей в блоге: 16
29.10.2016, 21:32 13
Цитата Сообщение от Sinkha Посмотреть сообщение
Но я задавался первоначально целью по максимуму все инкапсулировать, чтобы подключил хедеры и РАЗ! и все заработало.
Но Вы включаете хедер в хедер, а не на перекрест хедер одного в cpp другого. Советов не слушаете и говорите, что если включать не так как у Вас сделано, то не работает. Но Вы пробовали не те варианты, что надо. А вариантов много.
0
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
29.10.2016, 21:50  [ТС] 14
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но Вы включаете хедер в хедер, а не на перекрест хедер одного в cpp другого. Советов не слушаете и говорите, что если включать не так как у Вас сделано, то не работает. Но Вы пробовали не те варианты, что надо. А вариантов много.
Я просто был не в курсе что стандарт не гарантирует создание объекта в заданом порядке, если объявлять глоб переменные в разных файлах. При дебаге выяснилось, что объект snake в конструкторе food в момент вызова конструктора не существует. А перекресное включение нужно было для того чтобы food.cpp не говорил, мол snake не определен, так как он им пользуется.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2016, 21:50
Помогаю со студенческими работами здесь

Ошибка при вызове метода класса в методе другого класса
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса...

Ошибка при открытии класса в конструкторе
Подскажите пжлст. Написал форму со всеми объектами и событиями. После создал наследника этого...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Массив объектов в конструкторе другого класса
есть класс A: class A{ public: double *weights; A() { } A(int a) {


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru