Rechercher : dans
Par :

C++ problème de pointeur sur classe

Dernière réponse le 11 déc 2007 à 12:08:46 Laaris, le 11 déc 2007 à 11:29:39 
 Signaler ce message aux modérateurs

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?

Configuration: Linux
Firefox 1.5.0.13

Meilleures réponses pour « C++ problème de pointeur sur classe » dans :
Les objets en langage C++ Voir La création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

Char Snipeur, le 11 déc 2007 à 11:38:39

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.
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

2

 Laaris, le 11 déc 2007 à 12:08:46

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!

Répondre à Laaris
Collection CommentÇaMarche.net