2010-03-02 7 views
2

Problèmes d'itération. Le problème a à voir avec l'exactitude de const, je pense. Je suppose que B :: getGenerate() devrait être const pour que ce code fonctionne, mais je n'ai pas de contrôle sur B :: getGenerate().Const itéateur C++ C2662

Toute aide est grandement appréciée.

Merci à l'avance, JBU

Code suit:

int 
A::getNumOptions() const 
{ 
    int running_total = 0; 

    BList::const_iterator iter = m_options.begin(); 

    while(iter != m_options.end()) 
    { 
     if(iter->getGenerate()) //this is the line of the error; getGenerate() returns bool; no const in signature 
     { 
     running_total++; 
     } 
    } 

    return running_total; 
} 

1> \ A.cpp (118):. Erreur C2662: 'B :: getGenerate()': ne peut pas convertir ' ce 'pointeur de' const B 'à' B & '

+0

Je suppose qu'en réalité, vous faites avancer l'itération après l'instruction if dans la boucle while. – Arun

Répondre

3

Eh bien, si getGenerate est non-const, votre itérateur doit être non-const. Et si c'est le cas, votre getNumOptions devra également être non-const.

Si getGenerate n'est pas sous votre contrôle, il n'y a rien d'autre à faire. Mais si cette méthode peut êtreconst, amenez-le avec celui qui a implémenté cette méthode; dites-leur que ça devrait être const.

+0

merci! duh. Je reçois votre explication et j'ai eu l'impression que c'était ... Je pensais juste (sans raison) que j'avais plus de contrôle sur le fait que les méthodes que j'écrivais étaient constantes ou non. – jbu

1

B :: getGenerate() doit être déclarée comme ceci:

class B 
{ 
    bool getGenerate() const; 
}; 

Le mot-clé 'const' est le bit important. Cela indique au compilateur que l'appel de getGenerate() ne modifiera aucun des autres membres de B.