私は新しいC++プログラマーです。私は以前にJavaとANSI Cを学んでいました。マップを使った部分クラステンプレートの特殊化
まあ、私はC++を愛し、私はイテレータがどのように動作するか好きではありませんでした:
Javaでは、あなたは全体のコンテナをプライベートにして、それのイテレータにゲッター機能を実装することができ、そしてイテレータはメソッドを持っていますhasNext()
は、コンテナの最後に達したかどうかに応じてブール値を返します。私はC++に似た何かを見つけ
唯一の方法はinterator、最初と最後の位置に対応するiteratorBegin()
によって返された反復子をインクリメントし、iteratorEnd()
との比較を返さ2つのゲッター、iteratorBegin()
とiteratorEnd()
を、書いている、私を許可コンテナを反復するために最終的な位置は
に達していた。しかし、私はONE getterメソッドを使用したい、と私は思ったまで:とても良い今のところ
「のは、私自身のイテレータクラスを作ろう」、私は」それはセットとリストでうまくやったけど、マップではできないようだ。私をroubling: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;
}
専門的な方法をコンパイルし、それが言う(クラスが別々の.hで定義されている、これはcustomIterator.cppと呼ばれている):エラー:「マップ」このスコープ さえで宣言されていませんでした私はコードブロック
してくださいとgccのバージョン4.4.5(Debianの4.4.5-8)を使用していたファイル
の上に#include <map>
を追加しましたけれども、私はいくつかの援助を必要としています。
ご協力いただきありがとうございます。
あなたのインクルードマップの下でstd :: mapを使用します。または、custIterator ...のようにマップを修飾すると、このトリックを行う可能性があります。 –