C++ problème de pointeur sur classe
Laaris
-
Laaris -
Laaris -
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?
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?
Configuration: Linux Firefox 1.5.0.13
2 réponses
-
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. -
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!