我有一个类List
,它是一个固定大小的链接List,在该类中有另一个类ListIterator
,它指向List
的特定元素。我的问题是我不熟悉的c++
语法,gcc
的构建错误对我没有帮助。
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;
}
我收到以下错误:
错误:阴影模板parm&#39; class T&#39;
typedef ListIterator<T>
工作?T
用于List
用于迭代器?begin()
无效?答案 0 :(得分:1)
将ListIterator
模板参数T
重命名为其他内容,例如TInner
。或者如果它可以使用来自外部类的T
,则使其成为常规类。或者将ListIterator
移到List
类之外,这是一个更好的主意,因为ListIterator
实际上并没有执行任何特定于列表的操作。
要修复begin
功能,您需要使用正确的类型:
template<typename T, int length> typename List<T, length>::iterator
List<T, length>::begin(void)
{
iterator item_iterator(startIdx, storage[startIdx]);
return(item_iterator);
}