Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3179 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  pb de dédoublement du même objet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb de dédoublement du même objet

n°995508
pretorienx
Posté le 28-02-2005 à 10:39:13  profilanswer
 

j'ai un problème dans le code suivant:
 

Code :
  1. typedef struct _SonContainer {
  2. ThreatNode *a_node;
  3. _SonContainer *next;
  4. } SonContainer;
  5. class ThreatNode {
  6. private:
  7. SonContainer *son;
  8. OPERATOR op;
  9. char name[NAME_SIZE];
  10. char comment[COMMENT_SIZE];
  11. int probability[PROBABILITY_SIZE];
  12. bool is_root;
  13. bool is_treated;
  14. public:
  15. ThreatNode(OPERATOR, bool is_root = false);
  16. OPERATOR getOperator();
  17. void setOperator(OPERATOR);
  18.     void printProbability();
  19. void setProbability(int[PROBABILITY_SIZE]);
  20. int getProbability(int);
  21. bool isRoot();
  22. void setIsRoot();
  23. bool isTreated();
  24. void setIsTreated();
  25. char* getName();
  26. void setName(char*);
  27. char* getComment();
  28. void setComment(char*);
  29. SonContainer* getSon();
  30. void addSon(ThreatNode*);
  31. int evaluate(int); // evaluate the probability
  32. void printNode();
  33. };


 
 

Code :
  1. int ThreatNode::evaluate(int k) {
  2. cout << "je print la prob de "<<this->getName()<<"\n";
  3. this->printProbability();
  4. SonContainer *a_son_container, *a_brother_container;
  5. ThreatNode *a_son, *a_brother;
  6. int prob, final_prob;
  7. if (this->isTreated())
  8.  return this->probability[k];;
  9. //a_son = this->son;
  10. a_son_container = this->son;
  11. if (a_son_container == NULL) {
  12.  if (this->op != LEAF)
  13.   printf("WARNING: the node %s should be LEAF\n", this->getName());
  14.  return this->probability[k];
  15. }
  16. a_son = a_son_container->a_node;
  17. final_prob = a_son->evaluate(k);
  18. a_son->setIsTreated();
  19. a_brother_container = a_son_container->next;
  20. while (a_brother_container != NULL) {
  21.  a_brother = a_brother_container->a_node;
  22.  prob = a_brother->evaluate(k);
  23.  a_brother->setIsTreated();
  24.  if (this->op == AND)
  25.   final_prob = min_prob(final_prob, prob);
  26.  else
  27.   final_prob = max_prob(final_prob, prob);
  28.  a_brother_container = a_brother_container->next;
  29. }
  30. this->probability[k] = final_prob;
  31. return final_prob;
  32. }


 
 
le pb vient d'ici:
 
dans mon main je fais:
ThreatNode *root;
...
...
root->evaluate(0);
root->evaluate(1);
 
le problème est le suivant: quand je fais root->evaluate(0) tout se passe bien bien, mais quand je fais root->evaluate(1), il ignore le traitement que j'ai fait sur l'objet root en faisant evaluate(0), comme si je dédoublais l'objet chose que je ne veux pas faire, je veux travaillé sur les mêmes objets.
 
si quelqu'un comprend.
Merci de m'expliquer

mood
Publicité
Posté le 28-02-2005 à 10:39:13  profilanswer
 

n°995518
Taz
bisounours-codeur
Posté le 28-02-2005 à 10:46:39  profilanswer
 

tiens du C

n°995521
pretorienx
Posté le 28-02-2005 à 10:49:16  profilanswer
 

Taz a écrit :

tiens du C


 
je sais, je suis pas un cador en C++ mais j'ai besoin d'un petit coup de main, car la je vois vraiment pas.
 
Merci

n°995532
Lam's
Profil: bas.
Posté le 28-02-2005 à 10:58:05  profilanswer
 

Laisse moi deviner: tu t'attends à ce que evaluate(1) te renvoie le même résultat que le evaluate(0) qui précède, grace au calcul de la boucle en fin de fonction qui calcul une prob finale en fonction de tous les noeuds enfants, c'est bien ça ?

n°995539
Taz
bisounours-codeur
Posté le 28-02-2005 à 11:02:24  profilanswer
 

pretorienx a écrit :

je sais, je suis pas un cador en C++ mais j'ai besoin d'un petit coup de main, car la je vois vraiment pas.
 
Merci

aucun rapport. tu te complique le travail tout seul. remplace tous tes char* et char[] par des std::string, ça fera déjà un problème en moins. Et je ne parle même pas des const

n°995545
pretorienx
Posté le 28-02-2005 à 11:08:08  profilanswer
 

Lam's a écrit :

Laisse moi deviner: tu t'attends à ce que evaluate(1) te renvoie le même résultat que le evaluate(0) qui précède, grace au calcul de la boucle en fin de fonction qui calcul une prob finale en fonction de tous les noeuds enfants, c'est bien ça ?


 
non c pas ça.
En faite evaluate(0) doit me renvoyer une proba pour une catégorie de personne et evaluate(1) pour une autre catégorie.  
Et pour ce faire chaque objet possède en donnée membre un tableau de proba, chaque case correspond a 1 type de personne.
Ce que je pensais c ke evaluate 0 va travailler sur tout mes objets, mais précisément sur la donnée membre probability[0],... et de même pour evaluate 1 qui devrait travailler sur probability[1] de tout mes objets.
mais je contaste que root->evaluate(0); puis root->evaluate(1)
ne fais pas ce je j'escompte: on dirait que c 2 root différents alors que c le même., il fait le traitement sur evaluate(0); et le fait sur evaluate(1) sans tenir compte que evaluate(0) a modifier la donnée membre probability[0].
 
Voila.
J'espère avoir été claire.
Un petit coup de main serait le bien venu

n°995551
pretorienx
Posté le 28-02-2005 à 11:17:19  profilanswer
 

Taz a écrit :

aucun rapport. tu te complique le travail tout seul. remplace tous tes char* et char[] par des std::string, ça fera déjà un problème en moins. Et je ne parle même pas des const


 
cela me simplifera la vie en quoi ?
et pour les const ?
 
je vois pas trop ce que cela changerait de mettre des std::string

n°995554
sircam
I Like Trains
Posté le 28-02-2005 à 11:21:52  profilanswer
 

pretorienx a écrit :

cela me simplifera la vie en quoi ?
et pour les const ?
 
je vois pas trop ce que cela changerait de mettre des std::string


La correction ne va pas tarder à suivre...  :whistle:  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°995596
Taz
bisounours-codeur
Posté le 28-02-2005 à 11:49:51  profilanswer
 

je me casse

n°995598
pretorienx
Posté le 28-02-2005 à 11:51:52  profilanswer
 

Taz a écrit :

je me casse


 
 
je pensais que les gens de ce forum était là pour aider les autres, et pas pour se la peter quand ils savent et que les autres non ?

mood
Publicité
Posté le 28-02-2005 à 11:51:52  profilanswer
 

n°995616
sircam
I Like Trains
Posté le 28-02-2005 à 12:10:24  profilanswer
 

Taz a écrit :

je me casse


Non, allez, reviens, explique-lui.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°995811
Joel F
Real men use unique_ptr
Posté le 28-02-2005 à 14:39:09  profilanswer
 

aulieu de baragouiner du mauvais C, utilise std::string, std::list et tu verras que ton probleme sera deja plus clair :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  pb de dédoublement du même objet

 

Sujets relatifs
appel d'un objet d'une autre classe dans une classeobjet en cours javascript, ??
Explication de la "philosophie" ObjetMettre un écouteur sur un objet.
[Delphi 7] : demande d'information sur l'objetInsertion "propre" d'objet virtools [RESOLU]
Javascript: objet qui FUIT la sourisSavoir quand un objet est détruit.
[C++]Transformer un objet en un autre objet qui en hériteComment faire un timeout sur un objet TcpListener ?
Plus de sujets relatifs à : pb de dédoublement du même objet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR