template<class T>
class Vector {
size_t size;
size_t allocated;
T *array;
public:
Vector() {...};
Vector(size_t constr_size) {...};
Vector(const Vector &source) {...};
~Vector() {
delete array;
};
/*omitted methods*/
class iterator : public std::iterator<std::input_iterator_tag, int> {
Vector<T> *vector;
size_t position;
public:
iterator(Vector<T> *vector_, size_t idx) {
vector = vector_;
position = idx;
};
iterator(iterator &it) {
vector = it.vector;
position = it.position;
};
/*more omitted methods*/
};
Vector<T>::iterator begin() {
return Vector<T>::iterator(this, 0);
};
Vector<T>::iterator end() {
return Vector<T>::iterator(this, size);
};
};
当我尝试创建一个Vector并使用迭代器时,我得到一个错误没有用于初始化'Vector :: iterator'的匹配构造函数。为什么会这样?似乎所有必填字段都已定义,但不知何故我收到错误。
答案 0 :(得分:5)
Vector<T>::iterator begin() {
return Vector<T>::iterator(this, 0);
};
由于您在此处按值返回,因此将调用iterator
的复制构造函数。看起来像这样:
iterator(iterator &it);
请注意,您尝试使用临时(Vector<T>::iterator(this,0)
)复制构造,但复制构造函数通过非const引用获取其参数。您不能将临时绑定到非const引用,因此错误。
简单的解决方法是使复制构造函数采用const引用:
iterator(const iterator &it);