2017-11-11 181 views
0
我有创造的构造函数为我的内部类 ListIteratorList麻烦

,我不知道为什么这不工作:C++嵌套类构造函数和参数

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

没有匹配功能来电 '名单:: ::的ListIterator的ListIterator(const int的&,常量行&)'

我想创建一个ListIterator<T>其相同TList作为参数(显然是因为它迭代了与List包含的相同类型的元素),我该怎么做? 在方法begin()中使用new还是保持原样(不要使用新的,可能有的优点)?

+0

每个标准库容器都有'iterator'和'const_iterator'内部类,为什么你认为它是这样? –

+0

所以你告诉我,我不能创建一个'iterator',它有一个引用来自'list'的行? – binaryBigInt

回答

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

到迭代器的构造的第一个参数是一个可变int的参考。

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

您正在构造const类方法中的迭代器。 thisconst在这里。 startDataIdx在这里是有效的const,并且我相信您明白,您无法创建对const对象的非const引用。

在这种情况下,使用迭代器参数的引用完全没有任何用处,无论如何。只要摆脱参考,并通过一个简单的int

+0

好吧,我现在编辑我的问题与工作代码,非常感谢!你对如何解决其他问题有任何想法吗? – binaryBigInt

+0

是的,但'Row * mRow'有同样的问题,你不能摆脱'*'。 –

+0

为什么我不能以及如何修复错误? – binaryBigInt