我學習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