私は新しいC++プログラマーです。少し前に、JavaとANSI Cを学び、試してみることにしました。
ええと、私はC ++が大好きですが、イテレーターがどのように機能するかが気に入らなかったのです。
Javaでは、コンテナ全体をプライベートにして、そのイテレータにgetter関数を実装できます。イテレータにhasNext()
は、コンテナの最後に到達したかどうかに応じてブール値を返すメソッドがあります。
C ++で同様のことを行う唯一の方法は、2つのゲッターを作成することです。これにより、最初iteratorBegin()
とiteratorEnd()
最後の位置に対応するインターレーターが返され、返されたイテレーターがインクリメントされてiteratorBegin()
、と比較さiteratorEnd()
れ、最後までコンテナーを反復処理できるようになりました。位置に達していた
しかし、ゲッターメソッドを1つだけ使用したいので、「独自のイテレータークラスを作成しましょう」と考えました。
これまでのところ、セットとリストでうまくいきましたが、マップではうまくいかないようです。これが私を悩ませているコードです:(クラスは別の.hで定義されており、これはcustomIteratorと呼ばれます.cpp)
template<typename T, typename D>
const D& custIterator<T,D>::next()
{
const D& obj = (*it);
if(hasNext())
{
it++;
}
return obj;
}
//the above works fine
template<typename T, typename D>
const D& custIterator<map<T,D>,D>::next() //error in this line
{
D& obj = (*it).second;
if(hasNext())
{
it++;
}
return obj;
}
#include <map>
特殊なメソッドをコンパイルすると、次のように表示されます。エラー:ファイルの上に追加したにもかかわらず、このスコープで「マップ」が宣言されていません
コードブロック付きのgccバージョン4.4.5(Debian 4.4.5-8)を使用しています
どうか、助けが必要です。
ご清聴ありがとうございました!