Problème de const

Problème de const - C++ - Programmation

Marsh Posté le 20-03-2009 à 10:37:37    

Bonjour !
J'essai de résoudre le problème du voyageur de commerce avec un algorithme génétique... pour essayer...
 
Mon problème est pour l'instant lié au c++.
Mes villes sont des Genes. L'objet Gene possède une fonction qui permet de calculer la distance avec un autre Gene :
 

Code :
  1. float Gene::distanceWith( const Gene &gene )
  2. {
  3.     //calcul de la distance entre this et gene
  4.     //racine carré de ( distance entre x1 et x2 au carré + distance entre y1 et y2 au carré )
  5.     return  sqrt( ( _x - gene.x() ) * ( _x - gene.x() ) + ( _y - gene.y() ) * ( _y - gene.y() ) );
  6. }


 
J'ai également un Individu (trajet) qui a donc une liste de Gene (ville). L'objet Individu possède une fonction permettant de calculer la distance totale entre ses Genes (dans l'ordre de la liste de Genes) :
 

Code :
  1. //calcul la distance total du trajet dans l'ordre des points
  2. float Individu::distance()
  3. {
  4.     float distance = 0.0;
  5.     for( int i = 0; _genes.size() - 1; i++ ) {
  6.         if ( i == _genes.size() - 1 ) //dernier point, on test avec le 1er point
  7.             distance += _genes.at( i ).distanceWith( _genes.at( 0 ) );
  8.         else
  9.             distance += _genes.at( i ).distanceWith( _genes.at( i + 1 ) );
  10.     }
  11.     return distance;
  12. }


 
Je ne sais pas encore si la fonction fonctionne correctement car pour l'instant je n'arrive pas à la compiler.
 
J'ai un problème sur l'appel de distanceWith( const Gene &gene) :
 

Citation :

PVC/Individu.cpp:20: error: passing `const Gene' as `this' argument of `float Gene::distanceWith(const Gene& )' discards qualifiers


 
J'imagine que c'est un problème de const ou pas const dans les paramètres mais je sais pas trop pourquoi. Si vous avez une idée. Si quelque chose vous choque aussi, je suis interessé par vos remarques.
 
Merci !

Reply

Marsh Posté le 20-03-2009 à 10:37:37   

Reply

Marsh Posté le 20-03-2009 à 10:44:13    

Tu essaies d'appeler la fonction membre Gene::distanceWith() qui n'est pas const sur un objet qui l'est.  Solution: rendre la fonction membre Gene::distanceWith() const parce qu'elle n'a pas besoin de ne pas l'etre.

Reply

Marsh Posté le 20-03-2009 à 11:01:49    

Effectivement le problème vient de là, merci.

Reply

Sujets relatifs:

Leave a Replay

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