2016-06-13 22 views
1

Ich versuche, einen Iterator für einen binären Suchbaum zu implementieren. Ich wurde gebeten, in meinem Iterator keine STL zu verwenden. Ich muss nur die Operatoren außer Kraft setzen: ++, operator* und !=. Ich bekomme einen Fehler mit der operator*: "Nein *operator entspricht dieser Operanden. Operanden Typen sind *iterator<std::string>". Ich verwende eine Vorlagenbibliothek, daher weiß ich nicht, warum sie nicht funktioniert.binäre Suchbaum inorder iterator C++

Hier ist mein Code:

template <typename T> 
class Iterator : public std::iterator<std::forward_iterator_tag, { 

public: 
    Iterator(TreeNode<T>* root) 
    { 
     this->current = root; 
    } 

    template <typename T> 
    bool operator!=(Iterator<T> const & other) const 
    { 
     return this->current != other.current; 
    } 

    template <typename T> 
    T &operator*() const { 
     return current->element; 
    } 


    Iterator operator++() 
    { 
     current = current->nextInorder(); 
     return *this; 
    } 

    Iterator operator++(int dummy) 
    { 
     TreeNode<T> temp = current; 
     current = current->nextInorder(); 
     return *temp; 
    } 

private: 
    TreeNode<T>* current; 
    void nextInorder() 
    { 
     if (current->element == NULL)return; 
     else { 
      nextInorder(current->left); 
      nextInorder(current->element); 
      nextInorder(current->right); 
     } 
    } 

}; 

Antwort

0

Der Code ist nicht gut eingefügt (siehe class Iterator... Linie). Ich würde empfehlen, template <typename T> auf bool operator!=(Iterator<T> const & other) const und T &operator*() const Methoden zu entfernen. Weil der T derjenige ist, der für die Klasseninstanziierung verwendet wird.

Verwandte Themen