我在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()
或保持原样(不使用新的,可能有什么优势)会更好吗?
答案 0 :(得分:1)
ListIterator(int &mPos, Row* mRow) : pos(mPos) , row(mRow){}
迭代器构造函数的第一个参数是对可变int
的引用。
List<T, length>::begin() const{
iterator item_iterator(startDataIdx, ...
您正在const
类方法中构造迭代器。 this
在这里const
。 startDataIdx
在这里有效const
,而且我相信您理解,您无法创建对const
对象的非const
引用。
在迭代器中使用参数的引用,在这种情况下,完全没有任何用处。只需删除引用,并传入一个简单的int
。