2010-03-05 7 views
1

Ceci est un problème SDL, cependant j'ai le sentiment que le problème que j'ai rencontré n'est pas lié à SDL, mais plutôt à C++/pointeurs en général.C++: Impossible d'instancier un pointeur directement

Pour faire une histoire courte, ce code ne fonctionne pas (sous la direction de montrer ce que je vraiment fait):

player->picture = IMG_Load("player"); 
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation); 

Je ne vois rien à l'écran. Cependant, quand je le fais comme ça, ça marche:

SDL_Surface* picture = IMG_Load("player.png"); 
player->picture = picture; 
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation); 

Je peux voir le petit gars très bien.

Le vrai problème est que je ne peux pas instancier Player :: picture directement. Même lorsque j'essaie

picture = IMG_Load("player.png") 

Dans player.cpp, je me retrouve avec un pointeur nul.

+0

Veuillez afficher l'extrait de code * COMPLETE * le plus court qui illustre le problème –

Répondre

3

Je suis tellement stupide. Il s'avère que j'ai oublié l'extension de fichier ".png" chaque fois que j'ai essayé de stocker la surface dans Player :: picture, et que je me suis facilement souvenu de l'ajouter chaque fois que je l'ai utilisé dans une SDL_Surface déclarée dans main.cpp. J'ai eu le sentiment que je donnais sur quelque chose vraiment simple ici, mais c'est tout simplement embarrassant. Qu'est-ce qu'une punition appropriée pour cela?

+0

:) Aucune punition nécessaire. Mais d'autres réponses sont bonnes, vous devriez vérifier le résultat pour null et le manipuler correctement, ne pas le laisser tomber d'un null. Sauf si vous avez omis cela pour la concision. En tout cas, puisque c'est la réponse, cliquez sur la coche verte à côté d'elle. – GManNickG

+0

Je ne suis pas inscrit, donc j'ai dû attendre deux jours pour pouvoir marquer cette réponse. – aheld

0

Quel type de données est player-> picture? Quel type retourne IMG_Load? Il est vraiment difficile de trouver un scénario où la sauvegarde d'une expression dans une variable temporaire modifie le résultat, sauf si une conversion de type est impliquée.

Et je n'appellerais pas cette instanciation de pointeur. Vous instanciez une instance de type d'image et y stockez un pointeur.

+0

IMG_Load renvoie une SDL_Surface *, et lecteur-> image est également une SDL_Surface *. Je pense que si ce n'était pas le même type tout autour, j'obtiendrais une erreur de compilateur. – aheld

0

C'est pourquoi vous devez toujours vérifier pour voir ce IMG_Load() retourne ...

SDL_Surface* picture = IMG_Load("player.png"); 
if (picture == NULL) { 
    // there was obviously some sort of error. 
    // what does SDL_GetError() say? 
} 

Certaines fonctions SDL renvoient -1 s'il y a une erreur. Vérifiez simplement la documentation et assurez-vous que vous vérifiez vos retours de fonction. Ces étapes facilitent grandement le débogage.