C++ : à propos de la surcharge d'opérateurs

Résolu/Fermé
Grhyll - Modifié par Grhyll le 7/09/2010 à 02:44
 Grhyll - 8 sept. 2010 à 10:16
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 :

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

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 sept. 2010 à 08:51
tu peux faire plusieurs opérateurs :
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".
1
Wow... Eh bien... Merci beaucoup ! ;D
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 !
0
Personne n'a d'idée ? é_è
0
Hello,
Pourrais-tu faire voir la redéfinition de l'opérateur < dans ta classe STP ?

Cordialement, M.
0
Naturellement :

bool Compartiment::operator<(const Compartiment &compartiment){
	return (m_idSalle < compartiment.m_idSalle);
}


Et un bout de la structure de Compartiment histoire de :

class Compartiment
{
	int m_idSalle;
        std::string m_nom;
	std::set<int> m_creneaux;
etc...
0