C++嵌套模板类语法

C++ nested template classes syntax

本文关键字:语法 嵌套 C++      更新时间:2023-10-16

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

我收到以下错误:

错误:阴影模板参数"类 T">

  1. 如何使此typedef ListIterator<T>工作?
  2. 如何使用与迭代器List相同的T
  3. 为什么我的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);
}