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 постоянно использует указатели.