Bonjour a tous,
J'ai un souci de code où un accesseur retourne des valeurs ne correspondant pas à ce que j'ai écrit. J'écris ce programme dans la continuation du projet RPG d'un tutoriel. Voila l'histoire :
Mon code comprend une classe Joueur qui possède un tableau de personnage en argument. J'y créé un certain nombre d'objet instances de la classe Personnage, que j'appelle dans le main dans un tableau de pointeurs :
Jusque-là pas de souci. Ensuite je créé une boucle afin que les personnage jouent selon leur ordre d'initiative.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for (int i=0;i<joueurs.size();i++) { for (int j=0;j<joueurs[i].nbpersos();j++) { persos.push_back(joueurs[i].getpointeur(j)); } }
Tous ça était correct jusqu'a il y a peu, mais lorsque je compile, je tombe sur une boucle infinie. Et lorsque le code arrive à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 while (VerifVivant(persos)) //si au moins un perso est vivant { while (VerifActif(persos)) //si au moins un perso est actif { temps.compteurIncrem(); //incrémentation du compteur temps //printf("%i", temps.getCompteur()); for ( int i=0 ; i<persos.size() ; i++) { printf("%i", persos[i]->getIni()); if (temps.getCompteur()==persos[i]->getIni()) //si l'initiative d'un perso vaut le compteur { do //alors le perso joue { cout << "Tour de " << persos[i]->getName() << endl; action=choix(persos[i]->gettour()); if (action==1) {persos[i]->attaquer();} else if (action==2) {persos[i]->deplacer();} else if (action==3) {persos[i]->changerArme();} else if (action==4) {persos[i]->utiliserConsommable();} else if (action==5) {persos[i]->recevoirDegats(1000);persos[i]->devientInactif();} else if (action==6) {persos[i]->nefaisrien();} }while (persos[i]->estActif()==1); } } } temps.compteurReinit(); //lorsque tous les persos ont joué, le compteur est remis à zéro for (int i=0;i<persos.size();i++) { persos[i]->devientActif(); //tous les persos sont réactivés } }
La console se remplit à l'infini de : 40268602. Alors que j'ai initialisé m_ini de chaque personnage à 20. Voici la fonction getIni:
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("%i", persos[i]->getIni());
Et après quelques tests je me suis aperçu que ca me refaisait le coup avec d'autres accesseurs tels que la vie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //dans le .h int getIni() const; //dans le .ccp int Personnage::getIni() const {return m_iniB;}
Ca me paraît évident que la fonction getIni() renvoi l'adresse d'un pointeur mais je ne comprends pas pourquoi...Ai-je fait une erreur d'appel de fonction ou d'adressage?
Merci d'avance de vos réponses.
Partager