c++ - SDL 指针和引用

标签 c++ c pointers sdl pass-by-reference

我从来没有真正理解指针/引用,但在我编写的代码中,我收到一条错误消息

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;

最佳答案

这是 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});
<小时/>

I really should understand pointers first (...)

是的,我赞同这一点。了解指针是 C/C++ 编程的基础,SDL 也不异常(exception),正如您所看到的,SDL 不断使用指针。

关于c++ - SDL 指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668001/

相关文章:

c++ - 从 float 转换为 QByteArray

c++ - 设置插入进行奇怪数量的比较

c - C 中的 IUP - 教程无法编译

c++ - 如何在 FFTW 库中进行实数到实数的反向 FFT

c++ - 关于在 C++ 中初始化指针

c# - 在 C# 中使用数组的第一步

c++ - 让 shared_ptr 拥有现有指针的更简单方法

c++ - 如何使用 GetCORSystemDirectory()?

C 指针帮助 : Array/pointer equivalence

c - 如何终止后台 ssh 实例