Bonjour,
Je début en programmation c++, mais j'ai tout de même une base.
pour un certain code j'ai voulu utiliser la stl afin de créer une liste triée d'objets.
Voici mon objet en très simplifié :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Noeud { public: (constructeurs et autres...) int lireValeur() const {return Valeur;}; bool operator< (const Noeud & n2) {return (Valeur< n2.lireValeur()); private: int Valeur; autre déclarations... }
Il possède donc un opérateur de comparaison < surchargé pour comparer des objets entre eux. C'est l'opérateur choisi par défaut, si mes références sont bonnes, pour les conteneurs qui trient automatiquement les données, notamment priority_queue<> (ou map, set...)
J'ai voulu, parceque mon code a ce moment était plus facile à écrire comme ça, utiliser des pointeurs vers ces objets.
J'ai donc crée une liste: priority_queue<Noeud *> maListe; , et l'ai remplie avec des pointeurs vers mon objet. Mais évidemment, il ne les a pas du tout trié comme je voulais : c'est normal, une comparaison entre pointeurs ne compare pas les objets, mais les valeurs des pointeurs (c'est à dire des adresses mémoire, imprévisibles).
Alors ni une ni deux j'ai crée une fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 bool operator<(const Noeud * n1, const Noeud * n2) { return ( *n1 < *n2 ); }
et là... vlan ! ni une ni deux erreur :
/Desktop/TP6/tp6.cpp:55: error: 'bool operator<(const Noeud*, const Noeud*)' must have an argument of class or enumerated type
Utiliser des pointeurs pour remplir mon tableau trié n'est pas une bonne idée, et je dois donc changer mon code pour y mettre les objets pointés directement ? ou alors c'est à ce moment qu'on doit utiliser ces fameuses classes de comparaison ou foncteurs? (et si oui comment ou alors avez vous un lien pour un exemple avec une utilisation claire?)








Répondre avec citation
Partager