2010-03-05 56 views
1

这是一个SDL问题,但是我有强烈的感觉,我遇到的问题与SDL无关,但更多地与C++ /指针有关。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中,我结束了一个空指针。

+0

请显示演示问题的最短* COMPLETE *代码片段 – 2010-03-05 05:41:58

回答

3

我很愚蠢。结果就像我每次试图在Player :: picture中存储表面时都忘记了文件扩展名“.png”,并且每当我在main.cpp中声明的SDL_Surface中进行搅动时,都会方便地记住添加它。

我曾有过这样的感觉,我只是在眺望东西真的简单,但这只是尴尬。什么是适当的惩罚呢?

+0

:)不需要处罚。但其他答案是正确的,你应该检查null的结果并正确处理,而不是让它从null中崩溃。除非你为简洁而省略。无论如何,因为这是答案,请点击旁边的绿色复选标记。 – GManNickG 2010-03-05 19:23:10

+0

我还没有注册,因此我需要等待两天才能够标记出答案。 – aheld 2010-03-07 12:45:40

0

什么数据类型是player-> picture? IMG_Load返回什么类型?除非涉及类型转换,否则很难想出在临时变量中保存表达式会改变结果的情况。

而且我不会调用这个指针实例化。你正在实例化一些图片类型的实例并存储一个指向它的指针。

+0

IMG_Load返回SDL_Surface *,而player->图片也是SDL_Surface *。我想如果它不是全部相同的类型,我会得到一个编译器错误。 – aheld 2010-03-05 05:50:03

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,如果出现错误。只需检查文档,并确保你正在检查你的函数返回。这些步骤使调试更容易。

相关问题