2016-01-13 44 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

您是否正在嘗試使用this重新定義成員引用 - > _ it = iterator(&_pairs);? –

+0

這是錯字,但修復後仍然是同樣的問題。問題是,儘管我使用node *變量調用迭代器ctor,但它看不到它,但出現錯誤。 – KittyT2016

+0

無法確定事物的範圍,並且沒有顯示足夠的代碼。也許試試'this - > _ it = :: iterator(&_ pairs);'(假設你的'iterator'是全局聲明的,但被'std :: map'中的'iterator'隱藏, MtmMap'源自)。 –

回答

0

問題是你宣佈爲beginconst。因此,這在這一行:

this->_it = iterator(&_pairs); 

&_pairs已得到的const Node<Pair>*類型。您的iterator類只接受指向Node<Pair>的非const指針(不允許從常量指針到非常量指針的隱式轉換)。

需要修改iterator以接受(並存儲)常量指針,或者begin需要刪除const限定符。

+0

是的,你是對的,在許多其他麻煩)),但謝謝。我已經處理過了。 – KittyT2016