2016-01-13 2 views
0

помочь мне выяснить, пожалуйста, почему у меня есть эта ошибка:Проблемы с начать() мою реализацию карт

ошибка:

<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

Вы пытаетесь переопределить ссылку на элемент с этим -> _ it = iterator (& _pairs) ;? –

+0

это опечатка, но все тот же проблема после исправления. Проблема в том, что ошибка появляется, несмотря на то, что я вызываю iterator ctor с Node * переменной, но он ее не видит. – KittyT2016

+0

Невозможно определить, в какой области видимости, и вы не указали достаточно кода. Возможно, попробуйте 'this -> _ it = :: iterator (& _ pairs);' (в предположении, что ваш 'iterator' объявлен глобально, но скрывается' iterator' в 'std :: map', который я предполагаю' MtmMap' получен из). –

ответ

0

Проблема что вы объявили begin как const. Таким образом, это в этой строке:

this->_it = iterator(&_pairs); 

&_pairs имеет в результате тип const Node<Pair>*. Ваш класс iterator принимает неконстантный указатель на Node<Pair> (неявное преобразование из константного указателя на указатель не const).

Необходимо изменить либо iterator, чтобы принять (и сохранить) указатель константы, либо begin необходимо отдать квалификатор const.

+0

Да, вы правы, что среди многих других неприятностей)) но спасибо. Я уже справился с этим. – KittyT2016

Смежные вопросы