2011-06-10 103 views
2
template <class T> class Tree 
{ 
protected: 
    //-------------------------------------------------------- 
    // inner class Node 
    //  a single Node from a binary tree 
    //-------------------------------------------------------- 

    template <class T> class Node 
    { 
    public: 
     Node * left; 
     Node * right; 

     T value; 
     Node(T val) 
      : value(val), left(NULL), right(NULL){} 
     Node(T val, Node<T> * l, Node<T> * r) 
      : value(val), left(l), right(r){} 
    };  //end of Node class 

    Node<T> * root; 

public: 
    Tree() {root=NULL;} // initialize tree 

}; 

template <class T> 
class SearchTree : public Tree<T> 
{ 
public: 
    // protocol for search trees 
    void add(T value); 
    bool search(T value) {return search(root,value); } 
    void remove(T value); 
    Node<T>* minimum(){return minimum(root); } 
    Node<T>* findSuccessor(Node<T>* x); 
    Node<T>* findParent(T val); 

private: 
    void add(Node<T> * current, T val); 
    bool search(Node<T>* current, T val); 
    Node<T>* minimum(Node<T>* current); 

}; 

// THE ERROR IS HERE 
template <class T> 
Node<T>* searchTree<T>::minimum(Node<T>* current); 
{ 
    while (current->left != NULL) 
     curent= current->left; 
    return current; 
} 

**我想这样做,将返回节点, 的指针,我认为一个功能,因为它的模板害我一个错误, 做我有另一种方式来实现该功能?**错误C2143:语法错误:缺少';'之前,“<”

+0

你应该标记BЈовић或Blaze的答案是正确的。 – KomodoDave 2012-07-08 14:07:35

回答

2

这里有一个错字:

Node<T>* searchTree<T>::minimum(Node<T>* current); 

searchTreeSearchTree大写S

+1

这是真的,但它不能解决错误... – Blazes 2011-06-10 08:47:33

+0

我只是想知道 - 你有没有试图编译他的例子? – 2011-06-10 09:08:11

+2

@VJo:不,我只是看着错误行,看到了错字。编译应该是OP的工作恕我直言。 – Jon 2011-06-10 10:30:58

0

有几件事情是错误的......您的节点不需要是模板,因为它已经是;你有一个错字searchTree<T>::minimum(大写)...节点是树的一部分,所以它需要范围。

template <class T> class Tree 
{ 
protected: 
    //-------------------------------------------------------- 
    // inner class Node 
    //  a single Node from a binary tree 
    //-------------------------------------------------------- 

    class Node 
    { 
    public: 
     Node * left; 
     Node * right; 

     T value; 
     Node(T val) 
      : value(val), left(NULL), right(NULL){} 
     Node(T val, Node * l, Node * r) 
      : value(val), left(l), right(r){} 
    };  //end of Node class 

    Node * root; 

public: 
    Tree() {root=NULL;} // initialize tree 

}; 

template <class T> 
class SearchTree : public Tree<T> 
{ 
public: 
    // protocol for search trees 
    void add(T value); 
    bool search(T value) {return search(root,value); } 
    void remove(T value); 
    Node* minimum(){return minimum(root); } 
    Node* findSuccessor(Node* x); 
    Node* findParent(T val); 

private: 
    void add(Node * current, T val); 
    bool search(Node* current, T val); 
    Node* minimum(Node* current); 
}; 

template <class T> 
SearchTree<T>::Tree::Node* SearchTree<T>::minimum(SearchTree<T>::Tree::Node* current) 
{ 
    while (current->left != NULL) 
     curent= current->left; 
    return current; 
} 
1

哇这是一个挑战,修复你的例子。

#include <iostream> 

template <class T> class Tree 
{ 
    protected: 
     //-------------------------------------------------------- 
     // inner class Node 
     //  a single Node from a binary tree 
     //-------------------------------------------------------- 

     template <class T1> class Node 
     { 
      public: 
       Node * left; 
       Node * right; 

       T1 value; 
       Node(T1 val) : value(val), left(NULL), right(NULL){} 
       Node(T1 val, Node<T1> * l, Node<T1> * r) : value(val), left(l), right(r){} 
     };  //end of Node class 

     Node<T> * root; 

    public: 
     Tree() {root=NULL;} // initialize tree 

}; 

template < class T > 
class SearchTree : public Tree<T> 
{ 
    public: 
     // protocol for search trees 
     void add(T value); 
     bool search(T value) {return search(Tree<T>::root,value); } 
     void remove(T value); 
     typename Tree<T>::template Node<T>* minimum(){return minimum(Tree<T>::root); } 
     typename Tree<T>::template Node<T>* findSuccessor(typename Tree<T>::template Node<T>* x); 
     typename Tree<T>::template Node<T>* findParent(T val); 

    private: 
     void add(typename Tree<T>::template Node<T>* current, T val); 
     bool search(typename Tree<T>::template Node<T>* current, T val); 
     typename Tree<T>::template Node<T>* minimum(typename Tree<T>::template Node<T>* current); 

}; 

// THE ERROR IS HERE 
template <class T> 
typename Tree<T>::template Node<T>* 
    SearchTree<T>::minimum(typename Tree<T>::template Node<T> * current) 
{ 
    while (current->left != NULL) 
     current= current->left; 
    return current; 
} 

int main() 
{ 
    SearchTree<int> obj; 
} 

我认为你陷入了更复杂的事情,那么你认为,你标记的线不是唯一的问题。

查找相关名称和模板。

相关问题