[C++] Parcours dans un Set

Parcours dans un Set [C++] - C++ - Programmation

Marsh Posté le 20-03-2011 à 16:40:51    

Salut à tous,
 
j'ai un problème de parcours dans un set :
 

Code :
  1. Operateur ZoneRepos::getOperateurQualifie(Qualification q)
  2. {
  3.     set<Operateur>::iterator it = this->operateurs.begin() ;
  4.     for (it ; it != this->operateurs.end() ; it ++)
  5.     {
  6.         if(it->isQualifie(q)) return *it ;
  7.     }
  8.     return NULL ;
  9. }


 
la methode d'Operateur concernée :
 

Code :
  1. bool Operateur::isQualifie(Qualification q)
  2. {
  3.     list<Qualification>::iterator it = this->qualifications.begin() ;
  4.     for (it; it != this->qualifications.end() ; it ++)
  5.     {
  6.         if (*it == q) return true ;
  7.         return false ;
  8.     }
  9. }


 
Et voici mon erreur qui est sensé être sur cette ligne :

Code :
  1. if(it->isQualifie(q)) return *it ;


 
|error: passing 'const Operateur' as 'this' argument of 'bool Operateur::isQualifie(Qualification)' discards qualifiers
 
Si vous avez la solution.
Merci d'avance


Message édité par Knarf64 le 20-03-2011 à 16:42:51
Reply

Marsh Posté le 20-03-2011 à 16:40:51   

Reply

Marsh Posté le 20-03-2011 à 18:36:06    

Cela ne fonctionne pas car l'opérateur '->' te renvoie une référence constante, hors ta méthode isQualifie ne l'est pas.
 
C'est une bonne habitude en C++ de déclarer les méthodes constantes (cela t'oblige aussi à utiliser des 'const_iterator' au lieu des 'iterator'.
 
Autre remarque, quand tu passes en argument tes objets, utilise des références constantes (const Qualification& ). Cela évitera des copies inutiles.


Message édité par mr simon le 20-03-2011 à 18:36:44
Reply

Marsh Posté le 20-03-2011 à 19:59:19    

Effectivement c'etait bien cela.  Cependant, si l'operateur -> renvoit un const c'est parceque la source ( la variable qui precede -> ) est un itérateur je présume ?  
 
Concernant les références, je nettoierai tout cela a la fin pour eviter les copies.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed