SDL указатели и ссылки

Я никогда не понимал указатели / ссылки, но в коде, который я написал, я получаю сообщение об ошибке

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;

1 ответ

Это подпись SDL_BlitSurface:

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

Обратите внимание, как оба src а также dst являются 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 постоянно использует указатели.

Другие вопросы по тегам