没有合适的用户定义转换,但指定了转换

no suitable user-defined conversion, but the convertion is specified

我正在为一个学校练习编写带有迭代器的向量 class。 我收到以下错误,我不知道该怎么做:

'no suitable user-defined conversion from "vectorIterator" to "vectorIterator<const int>" exists'

这是我要执行的代码:

vector<int> v;
v.push_back(1);
v.push_back(2);
vector<int>::const_iterator it = v.begin();

这是我的 class 向量中代码的一部分:

template <typename T, typename Alloc = std::allocator<T> >
class vector {
..
public:
typedef vectorIterator<value_type>          iterator; 
typedef vectorIterator<const value_type>    const_iterator;
..
iterator        begin()         { return iterator(m_data); } // if commented the above code works
const_iterator  begin() const   { return const_iterator(m_data); }
..
}

如果我注释 begin() 的第一种形式,代码编译和运行正常,所以它似乎掩盖了 const 形式。 我希望编译器知道使用 begin() 的 const 形式,但事实并非如此。 我错过了什么?

非常感谢

由于vectorIterator是一个模板class,也就是说vectorIterator<int>vectorIterator<const int>两个不同的类型,他们可以相互转换吗?您需要为 vectorIterator<const int> 添加一个接受 vectorIterator<int> 的转换构造函数,使用模板应该就足够了(为简单起见,此处省略了对 U 的一些限制):

template<typename T>
struct vectorIterator { 
  // ...
  template<typename U>
  vectorIterator(vectorIterator<U>);
};

Demo