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?)
Partager