リストクラスのメンバークラスとしてイテレータクラスを作成しようとしています。また、間接演算子(*)をオーバーロードして、それが指しているリストにアクセスしようとしています。
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
ここlstptr
で、はリストへのcurrent
ポインタ、はノードクラスへのポインタ、ノードクラスにdata
はタイプ。のデータメンバーが含まれていますT
。
イテレータは次のように宣言されます。
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
オーバーロードされた演算子*の関数定義を正常にコンパイルできますが、次のようなことをしようとすると、次のようになります。
list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)
表示されるエラーは、<1>は不正な間接参照を使用していること、<2>はlist::iteratorからintに変換できないことを示しています。両方のエラーは14行目で発生します。
誰かが私が間違っていることと、間接演算子を正しくオーバーロードする方法を知っていますか?
注意:さらにコードを表示する必要がある場合は、どの部分を教えてください。コード全体をここに配置したくないのは、205行であり、そのうちの204行にはエラーがないためです。