Bonjour tout le monde
Je suis en train de travailler sur une application pour mes études et je bloque sur un petit truc, mais qui me fait galérer depuis plus de deux heures
Je m'en remet à vous.
Alors voilà, je vous explique :
J'ai deux classes :
Le but est de pouvoir enregistrer des éléments à afficher dans des ObjectField, ces objets pouvant eux même être des ObjectField.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class GraphicalObject { // tout un tas de trucs ... }; class ObjectField : public GraphicalObject { public : // tout un tas d'autres trucs ... std::list<GraphicalObject*> content; };
Maintenant tous ces objets déclarés, je voudrais tous les enregistrer facilement auprès d'un autre objet, dans lequel j'ai déclaré ceci :
Le but, vous vous en doutez, est de pouvoir enregistrer facilement tout le contenu d'un ObjectField, que ce soit des simples GraphicalObject ou d'autres ObjectField, grace à la surcharge de la méthode register_object(...), et cela de manière récursive
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 class MouseHandler { std::list<GraphicalObject *> registered_objects; void MouseHandler::register_object(GraphicalObject* o) { registered_objects.push_back(o); } void MouseHandler::register_object(ObjectField* o) { std::list<GraphicalObject*>::iterator i; for (i=o->content.begin(); i!=o->content.end(); ++i) register_object((*i)); } };
Seulement voilà le problème ...
Je remarque qu'à l'exécution, la seule fonction register_object(...) appellée est celle prenant comme paramètre un GraphicalObject, même si je passe en paramètre un ObjectField ...
Je comprend pourquoi, puisque ObjectField hérite de GraphicalObject, mais comment faire pour que ce soit la bonne méthode qui soit appellée ?
En espérant ne pas vous avoir trop embrouillé avec mes noms de classe bizarres, merci d'avance pour votre aide
Partager