VIVEZ LE
FOOTBALL !

Posez votre question Signaler

C++ : à propos de la surcharge d'opérateurs [Résolu]

Grhyll - Dernière réponse le 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 :)
Lire la suite 

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

5 réponses
Réponse
+1
moins plus
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".
Grhyll - 8 sept. 2010 à 10:16
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 !
Ajouter un commentaire
Réponse
+0
moins plus
Hello,
Pourrais-tu faire voir la redéfinition de l'opérateur < dans ta classe STP ?

Cordialement, M.
Grhyll - 7 sept. 2010 à 19:58
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...
Ajouter un commentaire
Ce document intitulé « C++ : à propos de la surcharge d'opérateurs » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?