SFML и C++ Уроки \ Разработка игр › Форумы › SFML Начало работы (подключение и настройка) › SFML + QT Creator "Программа неожиданно завершилась" › Ответ в теме: SFML + QT Creator "Программа неожиданно завершилась"
Ну у меня программа падает вот в этом месте:
1 2 3 4 5 6 7 |
Object Level::GetObject(std::string name) { // только первый объект с заданным именем for (int i = 0; i < objects.size(); i++) if (objects[i].name == name) return objects[i]; } |
Причина в том, что из данного метода ничего не возвышается, если объект с таким именем не был найден. Что еще раз доказывает, что факапу быть, если игнорировать предупреждения(warning) компилятора. Я вижу два решение данной проблемы:
- Возвращать в конце данного метода объект с вызовом конструктора по умолчанию и затем проверять результат на не равенство объекта созданного с конструктором по умолчанию. (Не рекомендую)
- Создать класс исключения “объект не найден” и бросать его в конце данного метода.
Если смотреть в глубь проблемы, то данного объекта нет из-за того что уровень (класс Level) не был загружен по причине отсутствия тайлсета.
1 2 3 4 5 |
if (!img.loadFromFile(imagepath)) { std::cout << "Failed to load tile sheet." << std::endl;//если не удалось загрузить тайлсет-выводим ошибку в консоль return false; } |
Отсюда можно сделать следующие выводы:
- либо вы не приложили папку изображений в архив и у вас совершенно другая причина не работоспособности;
- либо вам следует проверять результат вызова метода Level::LoadFromFile и завершать работу программы с ошибкой, если уровень не был загружен.
1 2 3 4 |
if(!lvl.LoadFromFile("map.tmx")) { //загрузили в него карту, внутри класса с помощью методов он ее обработает. std::cerr << "Level was not load" << std::endl; return 2; } |
P.S.: настоятельно рекомендую всем исправлять warning’и, которые возникают при компиляции.