j'ai un problème dans le code suivant:
Code :
- typedef struct _SonContainer {
- ThreatNode *a_node;
- _SonContainer *next;
- } SonContainer;
- class ThreatNode {
- private:
- SonContainer *son;
- OPERATOR op;
- char name[NAME_SIZE];
- char comment[COMMENT_SIZE];
- int probability[PROBABILITY_SIZE];
- bool is_root;
- bool is_treated;
- public:
- ThreatNode(OPERATOR, bool is_root = false);
- OPERATOR getOperator();
- void setOperator(OPERATOR);
- void printProbability();
- void setProbability(int[PROBABILITY_SIZE]);
- int getProbability(int);
- bool isRoot();
- void setIsRoot();
- bool isTreated();
- void setIsTreated();
- char* getName();
- void setName(char*);
- char* getComment();
- void setComment(char*);
- SonContainer* getSon();
- void addSon(ThreatNode*);
- int evaluate(int); // evaluate the probability
- void printNode();
- };
|
Code :
- int ThreatNode::evaluate(int k) {
- cout << "je print la prob de "<<this->getName()<<"\n";
- this->printProbability();
- SonContainer *a_son_container, *a_brother_container;
- ThreatNode *a_son, *a_brother;
- int prob, final_prob;
- if (this->isTreated())
- return this->probability[k];;
- //a_son = this->son;
- a_son_container = this->son;
- if (a_son_container == NULL) {
- if (this->op != LEAF)
- printf("WARNING: the node %s should be LEAF\n", this->getName());
- return this->probability[k];
- }
- a_son = a_son_container->a_node;
- final_prob = a_son->evaluate(k);
- a_son->setIsTreated();
- a_brother_container = a_son_container->next;
- while (a_brother_container != NULL) {
- a_brother = a_brother_container->a_node;
- prob = a_brother->evaluate(k);
- a_brother->setIsTreated();
- if (this->op == AND)
- final_prob = min_prob(final_prob, prob);
- else
- final_prob = max_prob(final_prob, prob);
- a_brother_container = a_brother_container->next;
- }
- this->probability[k] = final_prob;
- return final_prob;
- }
|
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