2013-10-29 50 views
-1

我從來沒有真正瞭解指針/引用,但在我寫的代碼我得到一個錯誤說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) 

注意兩個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不斷使用指針一樣。