C++ : à propos de la surcharge d'opérateurs
Résolu
Grhyll
-
Grhyll -
Grhyll -
Bonjour à tous !
J'édite mon post, car j'ai complètement changé de problème...
Bref, je vous expose la situation : j'utilise des set d'éléments d'une classe perso (nommée Compartiment), avec la stl.
Et je me retrouve avec ceci :
Je me suis laissé supposer que ça devait être lors de l'insertion d'éléments dans le set qu'il essaie de les comparer (puisque, si je ne dis pas trop de conneries, les éléments sont triés automatiquement dans ces bêtes là) ; je lui ai donc écrit une jolie petite surcharge de l'opérateur '<', sauf que ça ne lui va pas ; il la trouve (ainsi que le montrent les deux dernières lignes), mais ça ne lui convient pas, parce que le premier objet est de type Compartiment, et non const Compartiment.... le problème étant que je ne gère pas la façon dont cette surcharge est appelée, puisque cela a l'air d'être interne à stl...
Et du coup, je ne sais pas s'il est possible d'écrire une autre surcharge, pour un const Compartiment, elle...
Je reste à disposition si vous avez besoin de plus d'infos, et si jamais vous avez déjà une solution à proposer, et bien vous ferez un heureux :)
J'édite mon post, car j'ai complètement changé de problème...
Bref, je vous expose la situation : j'utilise des set d'éléments d'une classe perso (nommée Compartiment), avec la stl.
Et je me retrouve avec ceci :
Compilation en cours... Vaisseau.cpp c:\program files\microsoft visual studio 9.0\vc\include\functional(143) : error C2678: '<' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const Compartiment' (ou il n'existe pas de conversion acceptable) c:\users\grhyll\documents\visual studio 2008\projects\aubrais2000\aubrais2000\compartiment.h(25): peut être 'bool Compartiment::operator <(const Compartiment &)' lors de la tentative de mise en correspondance de la liste des arguments '(const Compartiment, const Compartiment)'
Je me suis laissé supposer que ça devait être lors de l'insertion d'éléments dans le set qu'il essaie de les comparer (puisque, si je ne dis pas trop de conneries, les éléments sont triés automatiquement dans ces bêtes là) ; je lui ai donc écrit une jolie petite surcharge de l'opérateur '<', sauf que ça ne lui va pas ; il la trouve (ainsi que le montrent les deux dernières lignes), mais ça ne lui convient pas, parce que le premier objet est de type Compartiment, et non const Compartiment.... le problème étant que je ne gère pas la façon dont cette surcharge est appelée, puisque cela a l'air d'être interne à stl...
Et du coup, je ne sais pas s'il est possible d'écrire une autre surcharge, pour un const Compartiment, elle...
Je reste à disposition si vous avez besoin de plus d'infos, et si jamais vous avez déjà une solution à proposer, et bien vous ferez un heureux :)
3 réponses
tu peux faire plusieurs opérateurs :
"const" mis à à la fin d'une déclaration signifie que la méthode ne modifiera pas l'objet, et qu'elle peut donc s'appliquer sur un objet de type "const".
const bool Compartiment::operator<(const Compartiment &compartiment){ return (m_idSalle < compartiment.m_idSalle); } const bool Compartiment::operator<(const Compartiment &compartiment)const{ return (m_idSalle < compartiment.m_idSalle); }
"const" mis à à la fin d'une déclaration signifie que la méthode ne modifiera pas l'objet, et qu'elle peut donc s'appliquer sur un objet de type "const".
J'avais essayé un truc dans ce goût là, mais visiblement mal, puisqu'alors ça ne marchait pas ! Mais là plus de problème, me voilà sauvé :) Merci pour le temps accordé à me lire !