C ++内部类Ctor和参数

时间:2017-11-11 19:09:38

标签: c++ list iterator listiterator

我在ListIterator内为我的内部课程List创建ctor时遇到问题,我不知道为什么这不起作用:

template<class T, int length>
class List {
public:
    typedef struct Row {
        T data;
        int prev;
        int next;
    } Row;

    class ListIterator {
        typedef ListIterator iterator;
        public:
            ListIterator(int mPos, Row mRow) : pos(mPos) , row(mRow){}
            //methods
        private:
            int pos;
            Row row;
    };

    typedef ListIterator iterator;

    iterator begin() const;
private:
    Row storage[length];
    int startDataIdx = 0;
};

template<class T, int length>
typename List<T,length>::iterator
List<T, length>::begin() const{
    iterator item_iterator(startDataIdx, storage[startDataIdx]);
    return(item_iterator);
}
  

没有匹配函数来调用&#39; List :: ListIterator :: ListIterator(const int&amp;,const Row&amp;)&#39;

我想创建一个与ListIterator<T>相同的T作为List作为参数(显然因为它迭代了与List包含的相同类型的元素),如何我这样做? 在方法new中使用begin()或保持原样(不使用新的,可能有什么优势)会更好吗?

1 个答案:

答案 0 :(得分:1)

ListIterator(int &mPos, Row* mRow) : pos(mPos) , row(mRow){}

迭代器构造函数的第一个参数是对可变int的引用。

List<T, length>::begin() const{
   iterator item_iterator(startDataIdx, ...

您正在const类方法中构造迭代器。 this在这里conststartDataIdx在这里有效const,而且我相信您理解,您无法创建对const对象的非const引用。

在迭代器中使用参数的引用,在这种情况下,完全没有任何用处。只需删除引用,并传入一个简单的int