少し、はまりましたので記録します。
#include <iostream>こんな感じの要素をもとに値を返すメソッドを作っていたのですが、
#include <vector>
using namespace std;
class Container : public vector<int>{
public:
int sum() const {
int result = 0;
for (Container::iterator ite = begin();
ite != end(); ++ite) {
result += *ite;
}
return result;
}
};
void main(){
Container c;
const int ARR[] = {1,2,3,4,5};
for (int i=0; i < sizeof(ARR) / sizeof(int); ++i){
c.push_back(ARR[i]);
}
cout << c.sum() << endl;
}
for (Container::iterator ite = begin();
でエラーです。
'const int *' 型(A)は 'int *' 型(B)に変換できない
それならと、
for (const Container::iterator ite = begin();
こうしても、やっぱり
'const int *' 型(A)は 'int *' 型(B)に変換できない
じゃあ
for (const Container::iterator ite = begin();
でも、やっぱり同じエラー(どっちの型も変わらない)。
う~ん、この(A)はvector<>::begin()の返り値ですよね。
ということは、 (B)はconst Container::iterator?
いや、今度は私ちゃんとconstって書いたアルヨ!
ちなみに、正解は
for (Container::const_iterator ite = begin();
const_iteratorというクラス内クラスを使うことで解決するのです。
ポインタのconstとconstなポインタ みたいなややこしさがあるなぁ。