数组分配

时间:2012-03-18 15:55:00

标签: c++ sdl

我有一个名为SpriteCollection的类,我用SDL加载图像。该类有一个名为:

的属性
SDL_Surface* sprites[];

我认为这是对的(虽然我不确定)。在同一个班级,我有一个方法:

void addNewSprite(SDL_Surface* sprite){

    this->sprites[n_sprites+1] = new SDL_Surface;
    this->sprites[n_sprites+1] = IMG_Load("spritepath.jpg");
    this->n_sprites++;
}

另一个检索SDL_Surface以在屏幕上绘图:

SDL_Surface getSprite(int sprite_index){

    return this->sprites[sprite_index];
}

在我正在使用的屏幕上画画:

Draw(x_position, y_position, this->sprite->getSprite[0], screen);

我正常加载图片;没关系,但是IDE在SDL_SurfaceSDL_Surface *之间返回有关指针和转换的错误。

我做错了什么?

编辑:错误消息:

E:\cGame.cpp|71|error: cannot convert `SDL_Surface' to `SDL_Surface*' for argument `1' to `int SDL_UpperBlit(SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect*)'|

2 个答案:

答案 0 :(得分:5)

在返回类型为getSprite的{​​{1}}函数中,您尝试返回SDL_Surface。也许你的意思是:

SDL_Surface*

此外,这些行非常可疑:

SDL_Surface* getSprite(int sprite_index){
  return this->sprites[sprite_index];
}

首先,你动态分配一个新的this->sprites[n_sprites+1] = new SDL_Surface; this->sprites[n_sprites+1] = IMG_Load("spritepath.jpg"); 并存储指向它的指针。然后你通过为它分配SDL_Surface调用的结果来摆脱那个指针。现在你永远无法IMG_Load表面,因为你丢失了它的指针。您可以考虑封装精灵并使用RAII惯用法来处理delete的分配。

除此之外,使用SDL_Surface代替数组可能会更好。

答案 1 :(得分:3)

SDL_Surface getSprite(int sprite_index)

应该是:

SDL_Surface* getSprite(int sprite_index)