C ++: не может создать указатель напрямую
Вопрос
Это проблема SDL, однако у меня есть сильное ощущение, что проблема, которую я столкнулся, не связана с SDL, но и более C ++ / указателям в целом.
Чтобы сделать длинную историю, этот код не работает (отредактировано, чтобы показать, что я В самом деле сделал):
player->picture = IMG_Load("player");
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);
Я ничего не вижу на экране. Однако, когда я делаю это, это работает:
SDL_Surface* picture = IMG_Load("player.png");
player->picture = picture;
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);
Я вижу маленького парня просто в порядке.
Настоящая проблема заключается в том, что я не могу создать экземпляр игрока :: Изображение напрямую. Даже когда я пытаюсь
picture = IMG_Load("player.png")
в Player.cpp, я в конечном итоге с NullPointer.
Решение
Я такой глупый. Оказывается, что я забыл расширение файла ".png" каждый раз, когда я пытался сохранить поверхность в игроке :: Изображение, и удобно запомнить, чтобы добавить его каждый раз, когда я устал его в SDL_Surface, объявленном в Main.cpp.
У меня было чувство, что я с видом на что-то В самом деле Простые здесь, но это просто смущение. Что подходит для этого наказание?
Другие советы
Какой тип данных является игрок-> изображение? Какой тип img_load return? Очень трудно придумать сценарий, где сохранение выражения во временной переменной изменениях изменяет результат, если только преобразование типа не участвует.
И я бы не назвал эту инсультирование указателя. Вы создаете экземпляр некоторого типа изображения и хранить на него указателя.
Вот почему вы всегда должны проверять, чтобы увидеть, что возвращает img_load () ...
SDL_Surface* picture = IMG_Load("player.png");
if (picture == NULL) {
// there was obviously some sort of error.
// what does SDL_GetError() say?
}
Некоторые функции SDL возвращают -1, если есть ошибка. Просто проверьте документацию и убедитесь, что вы проверяете свою функцию возврата. Эти шаги делают отладку намного проще.