帮我搞清楚为什么我有这个错误:
错误:
<function-style-cast>: The compiler cannot cast from "const mtm::Node<mtm::MtmMap<int,int,std::less<KeyType>>::Pair> *" to "mtm::MtmMap<int,int,std::less<KeyType>>::iterator"
这些是代码的不同相关部分:
节点
template <typename DataType>
class Node {
public:
DataType data;
Node<DataType> *head;
Node<DataType> *next;
public:
Node(const DataType& data) :data(data), head(nullptr) {
next = nullptr;
};
迭代器:
class iterator {
private:
Node<Pair>* _ptr = nullptr;
public:
iterator(Node<Pair>* ptr = nullptr) : _ptr(ptr) { }
iterator(const iterator& itr) = default;
~iterator() = default;
iterator& operator=(const iterator&) = default;
MtmMap的私人:
private:
Node<Pair> _pairs;
iterator _it;
int _size;
错误显示的代码:(在MtmMap的正文中)
iterator begin() const{
if (this->_size) {
this->_it = iterator(&_pairs);
}
return this->_it;
}
答案 0 :(得分:0)
问题是您已将begin
声明为const
。因此,这一行:
this->_it = iterator(&_pairs);
&_pairs
的结果类型为const Node<Pair>*
。你的iterator
类只接受一个指向Node<Pair>
的非const指针(不允许从const指针到非const指针的隐式转换)。
需要修改iterator
以接受(并存储)const指针,或begin
需要删除const
限定符。