我学习C++,不能让我的头围绕这个问题:通过迭代更改类成员
我有一个简单的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;;
}
}
然后,我有一个普通set<A> myset
这在循环中充满了insert(A(2, 2.2));
。
迭代把所有的值是没有问题的,但我想这个迭代中修改该值:
for(set<A>::iterator iter = set3.begin(); iter != set3.end(); iter++) {
iter->setVal(1);
}
我认为这应该是可行的,像你这样一个foreach内做到这一点在Java中循环。编译时我得到error: passing ‘const A’ as ‘this’ argument of ‘void A::setVal(int)’ discards qualifiers
。
看看STL集合的来源,我看到begin()
只能用作const方法,我认为这可能是问题。在setVal()
方法上使用const进行调试总是会出现相同的错误,因为我想修改A
的值,所以没什么意义。
这是错误的方法来改变一堆A
的值与循环?
+1,因为它似乎真的你搜索的第一个自己,这始终是一件好事,当你学到新的东西。 – ereOn 2010-08-12 13:17:15
请注意'val1.ival
2010-08-12 13:19:05
@Pedro:谢谢,现在你说出来了,很明显,但是我自己看不到。 – DrColossos 2010-08-12 13:23:55