C ++嵌套模板类语法

时间:2017-11-09 11:29:34

标签: c++ linked-list iterator

我有一个类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;

  1. 如何使typedef ListIterator<T>工作?
  2. 如何将T用于List用于迭代器?
  3. 为什么我的begin()无效?

1 个答案:

答案 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);
}