gpt4 book ai didi

c++ - 迭代器没有匹配的构造函数

转载 作者:行者123 更新时间:2023-11-30 01:11:22 37 4
gpt4 key购买 nike

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 并使用迭代器时,我收到一个错误 No matching constructor for initialization of 'Vector::iterator'。为什么会这样?似乎所有必填字段都已定义,但不知何故我收到错误。

最佳答案

Vector<T>::iterator begin() {
return Vector<T>::iterator(this, 0);
};

由于您在这里按值返回,iterator 的复制构造函数将被调用。看起来像这样:

iterator(iterator &it);

请注意,您正在尝试使用临时 (Vector<T>::iterator(this,0)) 进行复制构造,但复制构造函数通过非常量引用获取其参数。您不能将临时对象绑定(bind)到非常量引用,因此会出现错误。

简单的解决方法是使复制构造函数采用常量引用:

iterator(const iterator &it);

关于c++ - 迭代器没有匹配的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36198105/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com