Bonjour,
J'ai réalisé un Graphe générique, et celle ci comporte une fonction print(), déclarée comme ci-dessous :
Jusque là, tout va bien (un peu comme l'histoire de l'homme qui saute du 20ème étage..). Seulement, si la donnée contenue dans le Vertex est une autre classe comme par exemple Lieu :
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 template <class VertexKey, class VertexData, class EdgeKey, class EdgeData> class Graph { ... VertexData& atVertex(VertexKey key); EdgeData& atEdge(VertexKey vkey, EdgeKey ekey); ... void print(); }; ... template <class VertexKey, class VertexData, class EdgeKey, class EdgeData> void Graph<VertexKey, VertexData, EdgeKey, EdgeData>::print() { for (VertexKey i = firstVertex(); isVertexValid(); i = nextVertex()) { std::cout << i << "(" << atVertex(i) << ") : "; for (EdgeKey j = firstEdge(); isEdgeValid(); j = nextEdge()) std::cout << j << "(" << atEdge(i, j) << ") "; std::cout << std::endl; } }
Bien que je redéfinisse l'opérateur <<, la fonction print() m'affiche toujours l'adresse de l'objet Lieu :
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 class Lieu { int ordre; std::string action; public: Lieu(int ordre) : ordre(ordre) { }; int getOrdre() const { return ordre; }; void setOrdre(int _ordre) { ordre = _ordre; }; std::string getAction() const { return action; }; void setAction(std::string _action) { action = _action; }; friend std::ostream& operator<<(std::ostream& o, const Lieu& lieu) { return o << lieu.getOrdre() << ", " << lieu.getAction(); }; }; ----------------- Graph<int, Lieu *, int, int> activites;
Or, je voudrais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1(0x805c6b0) : 2(2) 11(11) 2(0x805c6e8) : 3(3) 3(0x805c778) : 4(4) ...
Ca devrait être réalisable ? Est-ce la redéfinition de l'opérateur << qui n'est pas correct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1(1, M) : 2(2) 11(11) 2(2, D) : 3(3) 3(3, O) : 4(4) ...
Merci d'avance !
Partager