我正在尝试为基于数组的列表类构建自定义const_iterator嵌套类。这是班级
class const_iterator {
private:
const T *p;
public:
const_iterator(const T *l) {
p = l;
}
const_iterator(const_iterator &ci) { p=ci.p;}
const T &operator*() const {return *p;}
bool operator==(const iterator &i) const {
if(*p==*i)
return true;
else
return false;
}
bool operator!=(const_iterator &i) const {
if(*p!=*i)
return true;
else
return false;
}
const_iterator &operator=(const_iterator &i) const {
p=i.p;
return this;
}
const_iterator &operator++() const {
return const_iterator(p+1);
}
const_iterator &operator--() const {
return const_iterator(p-1);
}
const_iterator operator++(int) const {
p = p+1;
return const_iterator(p-1);
};
const_iterator operator--(int) const {
p=p-1;
return const_iterator(p+1);
}
};
但是,当我回到课堂上进行开始,结束等时,如下所示:
iterator begin() {
return iterator(&data[0]);
}
const_iterator begin() const {
return const_iterator(&data[0]);
}
iterator end() {return iterator(&data[place+1]);}
const_iterator end() const {return const_iterator(&data[place+1]);}
const_iterator cbegin() const {
return const_iterator(&data[0]);
}
const_iterator cend() const {return const_iterator(&data[place+1]);}
我收到错误:"没有匹配的构造函数用于初始化 ' ArrayList的::为const_iterator"在我的cbegin和cend。我知道这可能是我对C ++不了解的愚蠢行为。在此先感谢您的帮助!
答案 0 :(得分:1)
删除const_iterator
复制构造函数(因为它不需要),或者使复制构造函数取const const_iterator&
。
这是一个最小的例子:
template <typename T>
class ArrayList
{
public:
class const_iterator {
private:
const T *p;
public:
const_iterator(const T *l) {
p = l;
}
const_iterator(const const_iterator &ci) : p(ci.p) {}
};
T data[10];
const_iterator cbegin() const {
return const_iterator(&data[0]);
}
};
int main()
{
ArrayList<int> a;
ArrayList<int>::const_iterator it = a.cbegin();
}
复制构造函数的删除也会编译,没有错误。这表明您的用户定义的复制构造函数引用了non-const
引用问题。
答案 1 :(得分:0)
const_iterator( T *l)
应为const_iterator(const T *l)