Bonjour,
je cherche à manipuler la copie d'un objet, grâce au code réduit suivant:
La méthode appelée reste bloquée dans une boucle infinie. Quand je manipule l'objet original:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CXmlFile f = _xml_file; f.SetTraversalMode(M_PRE_ORDER);
le message est envoyé correctement; si mes souvenirs sont bons, lorsqu'on initialise un objet au moment de sa déclaration, c'est le constructeur de copie qui est utilisé (et non l'opérateur =). Je pensais que celui par défaut suffirait pour cette classe dont voici la définition:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CXmlFile &f = _xml_file; f.SetTraversalMode(M_PRE_ORDER);
J'y ai donc rajouté le constructeur de copie suivant:
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
37
38
39
40
41
42
43
44
45
46
47
48
49 #ifndef _CXMLFILE_H #define _CXMLFILE_H #include <stack> #include <queue> #include "tinyxml.h" enum { M_PRE_ORDER, M_LEVEL_ORDER }; typedef TiXmlNode CXmlNode; class CXmlFile { public: CXmlFile() {} ~CXmlFile() {} public: CXmlNode *Open(const char *file); CXmlNode *NextNode(); CXmlNode *CurrentNode() {return _node;} public: void SetTraversalMode(const int mode); private: void init_node_stack(); void init_node_queue(); private: TiXmlDocument _doc; CXmlNode *_node; std::stack<CXmlNode *> _stack; std::queue<CXmlNode *> _fifo; int _mode; public: static int NodeDepth(const CXmlNode *node); static const char *GetAttribute(const CXmlNode *node, const char *key); }; #endif // _CXMLFILE_H
Mais le problème de départ persiste (surement parce que le constructeur de copie généré par défaut doit être le meme que celui-ci)... j'avoue que c'est la première fois que je suis amené à créer un constructeur de copie à la mano. Quelqu'un pourrait m'aiguiller vers une solution?
Code : Sélectionner tout - Visualiser dans une fenêtre à part CXmlFile(const CXmlFile ©) : _doc(copy._doc), _node(copy._node), _stack(copy._stack), _fifo(copy._fifo), _mode(copy._mode) {}
Thx!
Partager