C++ problème de pointeur sur classe

Fermé
Laaris - 11 déc. 2007 à 11:29
 Laaris - 11 déc. 2007 à 12:08
Bonjour,

Je dois programmer un puissance 4 en C++, avec deux mode de jeu: deux joueurs ou un joueur contre l'ordinateur.

J'ai donc une classe joueur avec deux attributs nom et symbole, dont héritent deux sous classes: humain et cpu.

Au début de mon programme, après avoir demandé à l'utilisateur quel type de partie il veut faire, je crée mes instances en fonction de sa réponse:

joueur* joueur_courant;
joueur* adversaire;
joueur* temp

humain joueur1 (nom,symbole);
joueur_courant=&joueur1;

if (typepartie==1) { // si c'est une partie solo
cpu ordinateur("l'ordinateur",symbole);
adversaire=&ordinateur;
// quand je teste adversaire->nom ici, il me retourne le nom que je lui ai donné
}
else {
humain joueur2(nom,symbole);
adversaire=&joueur2;
// quand je teste adversaire->nom ici, il me retourne "l'ordinateur"
}

Mais quand je teste adversaire->nom après être sorti du if, il ne me retourne rien.
Par contre, si je teste adversaire->symbole, ça fonctionne partout. (???)

Ensuite quand je change de joueur, je fais:

temp=joueur_courant;
joueur_courant=adversaire;
adversaire=temp;

Et bien sûr ça ne fonctionne pas vu que visiblement le pointeur adversaire a perdu l'adresse qu'il contenait en sortant du if.

Alors deux choses m'intriguent:

- adversaire perd-il son contenu en sortant du if?
- si ce n'est pas le cas, pourquoi ne renvoie-t-il pas adversaire->nom ?
- si c'est le cas, pourquoi renvoie-t-il correctement adversaire->symbole?

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 déc. 2007 à 11:38
joueur2 et ordinateur sont détruit en sortant du if. Donc, adversaire pointe vers un objet détruit.
je te conseil de faire :
adversaire = new humain(nom, symbol);
ou un truc dans le genre, c'est plus propre et ça évite de crer des variable temporaires inutile.
0
Bon sang mais c'est bien sûr!

Je l'ai vu en cours en plus que les destructeurs sont appelés à la fin du bloc. ^^

Honte à moi et un grand merci à toi!
0