[英]C++ const_iterator no matching constructor
I'm trying to build a custom const_iterator nested class for my Array-based list class. 我正在尝试为基于数组的列表类构建一个自定义const_iterator嵌套类。 here's the class
这是课程
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);
}
};
However, when I go back into my class to make a begin, end, etc. as shown here: 但是,当我回到班级开始,结束等时,如下所示:
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]);}
I get an error: "no matching constructor for initialization of 'ArrayList::const_iterator" on my cbegin and cend. 我收到一个错误:在我的cbegin和cend上,“没有用于初始化'ArrayList :: const_iterator的匹配构造函数”。 I'm aware it's probably something stupid I don't understand about C++.
我知道这可能是我不了解C ++的愚蠢之举。 Thanks in advance for the help!
先谢谢您的帮助!
Either remove the const_iterator
copy constructor (as it is not needed), or make the copy constructor take a const const_iterator&
. 要么删除
const_iterator
复制构造函数(因为不需要),要么使复制构造函数采用const const_iterator&
。
Here is a minimal example: 这是一个最小的示例:
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();
}
This compiles here: http://ideone.com/04EE4P 此处编译: http : //ideone.com/04EE4P
The removal of the copy constructor also compiles with no errors. 复制构造函数的删除也可以正确编译。 This indicates that your user-defined copy constructor that takes a
non-const
reference was causing the issue. 这表明使用
non-const
引用的用户定义副本构造non-const
导致了此问题。
const_iterator( T *l)
应该是const_iterator(const T *l)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.