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