-1

我从来没有真正理解过指针/引用,但是在我写的代码中我得到一个错误说

Invalid arguments '
Candidates are:
int SDL_UpperBlit(SDL_Surface *, SDL_Rect *, SDL_Surface *, SDL_Rect *)
'

我真的应该先了解指针,但有人可以帮助我吗?

void MapManager::draw(SDL_Surface *surface, SDL_Surface &mainSurface, int x, int y){
SDL_BlitSurface(surface, NULL, mainSurface, new SDL_Rect{x, y, 32, 32});
}

用作

draw(img_brickImage, *inDisplay, x * TILE_SIZE, y * TILE_SIZE);

展示:

SDL_Surface* display;
4

1 回答 1

1

这是 SDL_BlitSurface 的签名:

int SDL_BlitSurface(SDL_Surface*    src,
                    const SDL_Rect* srcrect,
                    SDL_Surface*    dst,
                    SDL_Rect*       dstrect)

注意srcdst都是SDL_Surface指针 ( SDL_Surface*)。

您正在传递给dst一个引用,SDL_Surface &mainSurface,它不是一个指针。

您可以更改函数签名以接收指针(也可以更改调用它的位置):

void MapManager::draw(SDL_Surface *surface, SDL_Surface *mainSurface, int x, int y)

或者将引用的地址传递给预期的指针参数:

SDL_BlitSurface(surface, NULL, &mainSurface, new SDL_Rect{x, y, 32, 32});

我真的应该先了解指针(...)

是的,我赞同这一点。理解指针是 C/C++ 编程的基础,SDL 也不例外,正如您所见,SDL 经常使用指针。

于 2013-10-29T20:11:49.110 回答