2012-02-24 194 views
0

我写的二叉树的模板类:迭代器模板二叉树

template <class T> 
class Tree { 
public: 
    Tree():head_(NULL),size_(0){} 
    ~Tree(); 
    bool isEmpty()const {return size_ == 0;}; 
    bool insert(const T& ele); 
    bool remove(const T& ele); 
    size_t size() {return size_;} 
public: 

    class inorder_iterator 
    { 
     inorder_iterator& operator++(); 
    private: 
     Node<T>* cur_; 
    }; 
} 

什么是运营商把定义++(我不能老是编译使用以下)

template <class T> 
Tree<T>::inorder_iterator& 
Tree<T>::inorder_iterator::operator++() 
{ 
    //.... 
} 
+2

第二段代码的第三行是否以源代码中的Tree> T>开头? – 2012-02-24 16:25:42

回答

2

随着这些变化?它编译:

template <class T> 
class Node {}; 

template <class T> 
class Tree { 
    Node<T> head_; 
    size_t size_; 
public: 
    Tree():head_(NULL),size_(0){} 
    ~Tree(); 
    bool isEmpty()const {return size_ == 0;}; 
    bool insert(const T& ele); 
    bool remove(const T& ele); 
    size_t size() {return size_;} 
public: 

    class inorder_iterator 
    { 
     inorder_iterator& operator++(); 
    private: 
     Node<T>* cur_; 
    }; 
}; 

template <class T> 
typename Tree<T>::inorder_iterator& 
Tree<T>::inorder_iterator::operator++() 
{ 
    //.... 
} 
+0

它不是明确的 – Yakov 2012-02-24 17:10:57

+0

现在它是好的 - 谢谢 – Yakov 2012-02-24 17:13:45

+0

你可以解释typename键的需要吗? – Yakov 2012-02-24 17:14:39