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 templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
[Optimisation] Polymorphisme “statique” Voir* Le polymorphisme est l'une des pierres angulaires du paradigme objet En C++, il s'exprime sous la forme de fonctions virtuelles : celles-ci permettent d'adapter dynamiquement (i.e. à l'exécution) leur code au type de l'objet auxquelles elles sont...
Le mot-clé static ou les attributs et méthodes de classe en POO Voir(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore,...
Les objets en langage C++ VoirLa 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 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...

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