C ++:无法直接实例化指针

时间:2010-03-05 05:38:41

标签: c++ sdl sdl-image nullptr

这是一个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中,我最终得到了一个nullpointer。

3 个答案:

答案 0 :(得分:3)

我太蠢了。结果就像我每次尝试在Player :: picture中存储表面时忘记了文件扩展名“.png”,并且每当我在main.cpp中声明的SDL_Surface中将其添加时,都会记得添加它。

我觉得我在这里忽略了一些非常简单的东西,但这只是尴尬。对此有什么合适的惩罚?

答案 1 :(得分:0)

什么数据类型是播放器 - >图片? IMG_Load返回什么类型?除非涉及类型转换,否则很难想出在临时变量中保存表达式会改变结果的场景。

我不会调用此指针实例化。您正在实例化某个图片类型的实例并存储指向它的指针。

答案 2 :(得分:0)

这就是为什么你应该经常检查以查看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。只需检查文档并确保您正在检查函数返回。这些步骤使调试变得更加容易。