我有一个类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;
}
我收到以下错误:
error: shadows template parm 'class T'
- 我该怎么做
typedef ListIterator<T>
工作? - 如何使用相同的
T
我用于List
对于迭代器? - 为什么我的
begin()
不工作?
最佳答案
将 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);
}
关于C++ 嵌套模板类语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200710/