我的Map实现的begin()有问题

时间:2016-01-13 18:51:35

标签: c++ dictionary casting iterator nodes

帮我搞清楚为什么我有这个错误:

错误:

<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;
        }

1 个答案:

答案 0 :(得分:0)

问题是您已将begin声明为const。因此,这一行:

this->_it = iterator(&_pairs);

&_pairs的结果类型为const Node<Pair>*。你的iterator类只接受一个指向Node<Pair>的非const指针(不允许从const指针到非const指针的隐式转换)。

需要修改iterator以接受(并存储)const指针,或begin需要删除const限定符。