C ++: Impossibile istanziare direttamente un puntatore
Domanda
Questo è un problema di SDL, ma ho la forte sensazione che il problema mi sono imbattuto non è correlato alla SDL, ma più per C ++ / puntatori in generale.
Per fare una lunga storia breve, questo codice non funziona (a cura di mostrare quello che davvero ha fatto):
player->picture = IMG_Load("player");
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);
vedo nulla sullo schermo. Tuttavia, quando lo faccio in questo modo, funziona:
SDL_Surface* picture = IMG_Load("player.png");
player->picture = picture;
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);
posso vedere il piccolo ragazzo che bene.
Il vero problema è che non riesco a istanziare Player :: immagine direttamente. Anche quando provo
picture = IMG_Load("player.png")
in player.cpp, io alla fine con un nullpointer.
Soluzione
Io sono così stupido. Si scopre che, come ho dimenticato l'estensione ".png" ogni volta che cercavo di memorizzare la superficie Player :: immagine, e convenientemente ricordato di aggiungere ogni volta che mi stired in uno SDL_Surface dichiarate in main.cpp.
Ho avuto la sensazione che stavo trascurando qualcosa di davvero semplice qui, ma questo è solo imbarazzante. Cosa c'è una punizione raccordo per questo?
Altri suggerimenti
Che tipo di dati è player-> foto? Che tipo fa ritorno IMG_Load? E 'davvero difficile a venire con uno scenario in cui il risparmio un'espressione in una variabile temporanea cambia il risultato, a meno che non sia coinvolto una conversione di tipo.
E non vorrei chiamare questo puntatore esemplificazione. Stai istanziare un'istanza di un certo tipo di immagine e memorizzare un puntatore ad esso.
Questo è il motivo per cui si dovrebbe sempre controllare per vedere che IMG_Load) restituisce (...
SDL_Surface* picture = IMG_Load("player.png");
if (picture == NULL) {
// there was obviously some sort of error.
// what does SDL_GetError() say?
}
Alcune funzioni SDL restituiscono -1 se si verifica un errore. Basta controllare la documentazione e assicurarsi che si sta verifica la funzione ritorna. Questi passaggi rendono il debug di un molto più facile.