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

Résolu
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 :

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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
Grhyll
 
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
Grhyll
 
Personne n'a d'idée ? é_è
0
swed
 
Hello,
Pourrais-tu faire voir la redéfinition de l'opérateur < dans ta classe STP ?

Cordialement, M.
0
Grhyll
 
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