Bonjour à tous,
c'est mon premier message sur le forum, soyer indulgent svp pour toutes erreur ou répétitions de post.
Etudiant, je suis actuellement en cour de codage d'un jeux 2D (pour épreuve de BTS) avec la SDL en POO et je voudrais retourner avec une méthode un objet de sa propre classe. Je m'explique un peu mieux :
voici les fichiers composant mon projet (version simplifié ):
main.cpp
image.cpp & .h
class Image
{
public:
...
private:
SDL_Surface *m_image; //'objet' de la SDL permettant de gérer une image
SDL_Rect m_position; //'objet' de la SDL permettant de gérer la position à l'écran
};
imageInfo.cpp & .h
class InfoImage // destiné à faire un tableau dynamique d'objet 'Image' codé à la manière du langage C
{
public:
InfoImage *getAdresseImgSuiv()
...
private:
Image *m_image;
InfoImage *m_infoImageSuivante;
};
dictionnaire.cpp & .h
class Dictionnaire //Destiné à raffraichir toutes les surfaces du tableau dynamique d''infoImage'
{
public:
void retirerInfo(InfoImage *uneInfo);
...
private:
InfoImage *m_premierInfoImage;
InfoImage *m_dernierInfoImage;
int m_nbElement;
};
personnage.cpp & .h
class Personnage
{
public:
~Personnage();
....
private:
int m_vie;
InfoImage *m_image;
Dictionnaire *m_dictionnaire;
};
voici le problème dans l'ordre de la pile d'appel :
Personnage::~Personnage()
{
m_dictionnaire->retirerInfo(m_image);
delete m_image;
}
void Dictionnaire::retirerInfo(InfoImage *uneInfo) //Boucle jusqu'a trouvé l'adresse correspondante au paramètre
{
InfoImage *infoTmp(m_premierInfoImage), *infoComparaison;
//Test si la premiere carte est a supprimé
if (uneInfo == m_premierInfoImage)
{
infoTmp = m_premierInfoImage->getAdresseImgSuiv();
m_premierInfoImage = infoTmp;
}
else
{
//Boucle jusqu'à trouvé le paramètre dans le pointeur de l'info suivante
for(int i = 0; i < Dictionnaire::getNombreInfo(); i++)
{
infoTmp = infoComparaison->getAdresseImgSuiv();
if(infoComparaison == uneInfo)
{
InfoImage *infoNecessaire = NULL;
infoNecessaire = infoComparaison->getAdresseImgSuiv();
infoTmp->AllouerSuivant(infoNecessaire);
delete infoComparaison;
break;
}
infoTmp = infoComparaison;
}
}
infoTmp = infoComparaison = NULL;
delete infoTmp, infoComparaison;
m_nbElement--;
}
infoImmage* InfoImage::getAdresseImgSuiv()
{
return m_infoImageSuivante;
}
Le compilateur ne veut pas compiler, il ne connait pas l'objet 'infoImage' lorsqu'il compile la méthode 'infoImage* getAdresseImageSuiv()'. Connaitriez vous une méthode pour prédéfinir la classe ou autre.
Certaines personnes me diront que c'est pas la bonne solution de faire un tableau dynamique d'objet en C++, mais j'ai appris cette manière l'an dernier en cour de C, cela justifie mon choix. Mais je suis ouvert à toutes solutions et critiques sur cette méthode en C++.
Merci pour vos réponses.
PS: je vois dans l'aperçu que mon code n'est pas indenté, je ne sais pas comment on fait pr introduire du code correctement.