J'apprends C++ et ne peut pas obtenir ma tête autour de ce problème:Modification d'un cours par un membre iterator
J'ai une simple classe A
class A {
private:
int ival;
float fval;
public:
A(int i = 0, float f = 0.0) : ival(i), fval(f) { }
~A(){ }
void show() const {
cout << ival << " : " << fval << "\n";
}
void setVal(int i) {
ival = i;
}
//const getters for both ival and fval
//used for the default "lesser"
friend bool operator<(const A& val1, const A& val2) {
return val1.ival < val2.ival ? true : false;;
}
}
Puis j'ai une set<A> myset
régulière est rempli avec insert(A(2, 2.2));
dans une boucle.
Itère pour obtenir toutes les valeurs ne sont pas un problème, mais je veux modifier la valeur dans cette itération:
for(set<A>::iterator iter = set3.begin(); iter != set3.end(); iter++) {
iter->setVal(1);
}
Je suppose que cela devrait être faisable, comme vous le feriez en Java dans un foreach boucle. Lors de la compilation, je reçois error: passing ‘const A’ as ‘this’ argument of ‘void A::setVal(int)’ discards qualifiers
. En regardant les sources de l'ensemble STL, je vois que begin()
est seulement disponible en tant que méthode const et je pense que cela pourrait être le problème. Messing autour de const sur la méthode setVal()
a toujours eu la même erreur et n'aurait pas beaucoup de sens puisque je veux modifier la valeur de A
.
Est-ce la mauvaise approche de changer un tas de valeurs de A
avec une boucle?
+1 car il semble vraiment que vous cherchez d'abord par vous-même, et ce qui est toujours une bonne chose quand vous apprenez quelque chose de nouveau. – ereOn
Notez que 'val1.ival
@Pedro: merci, maintenant que vous le dites, c'est évident, mais je ne pouvais pas le voir moi-même. – DrColossos