没有合适的用户定义转换,但指定了转换
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>);
};
我正在为一个学校练习编写带有迭代器的向量 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>);
};