私はクラスが固定サイズのリンクされたリストであり、そのクラスの中にList
の特定の要素を指す別のクラスListIterator
があります。私の問題はc++
の構文です。よく慣れていないので、gcc
のビルドエラーは私を助けてくれません。C++ネストされたテンプレートクラスの構文
template<class T, int length>
class List {
public:
//some stuff here
//Row-struct
template<class T>
class ListIterator {
public:
ListIterator(int mPos, Row& mRow){pos = mPos; row = mRow;};
T& operator *();
private:
int pos;
Row& row;
};
typedef ListIterator<T> iterator;
iterator begin();
private:
int startIdx;
Row storage[length];
};
template<class T, int length>
ListIterator List<T, length>::begin() {
ListIterator *itor = new ListIterator(startIdx, storage[startIdx]);
return itor;
}
私は、次のエラーを取得:
error: shadows template parm 'class T'
- は、どのように私はこの
typedef ListIterator<T>
作業を行うことができますか? - どうすれば同じものを使うことができますか
T
イテレータのためにList
に使用しましたか? begin()
はなぜ機能しませんか?
を、あなたはそれがこの範囲で知られています、それを使用して、何もする必要はありません。 – Sopel
しかし 'ListIterator'では' ListIterator'で 'typedef – binaryBigInt
' 'ListIterator'クラス' Listclass List'内の 'List'を' T'にアクセスしたいので 'ListIterator'でも' template'である必要はありません。あなたは直接 'class iterator'と名前をつけてtypedefをスキップすることもできます – Caleth