C ++: невозможно создать экземпляр указателя напрямую - PullRequest
1 голос
/ 05 марта 2010

Это проблема 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);

Я прекрасно вижу маленького парня.

Реальная проблема в том, что я не могу создать экземпляр Player :: picture напрямую.Даже когда я пытаюсь

picture = IMG_Load("player.png")

в player.cpp, я получаю нулевой указатель.

Ответы [ 3 ]

3 голосов
/ 05 марта 2010

Я такой глупый. Получается, что я забыл расширение файла ".png" каждый раз, когда пытался сохранить поверхность в Player :: picture, и не забывал добавлять его каждый раз, когда вставлял его в SDL_Surface, объявленный в main.cpp.

У меня было ощущение, что я пропускаю что-то действительно простое здесь, но это просто смущает. Какое подходящее наказание за это?

0 голосов
/ 05 марта 2010

Вот почему вы всегда должны проверять, что возвращает 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, если возникает ошибка.Просто проверьте документацию и убедитесь, что вы проверяете, возвращаются ли ваши функции.Эти шаги значительно упрощают отладку.

0 голосов
/ 05 марта 2010

Какой тип данных player-> picture? Какой тип возвращает IMG_Load? Сложно придумать сценарий, в котором сохранение выражения во временной переменной меняет результат, если не требуется преобразование типа.

И я бы не назвал этот указатель экземпляром. Вы создаете экземпляр экземпляра некоторого типа изображения и сохраняете указатель на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...