2011-10-19 41 views
0

我构建一个简单的AVL树,并接收来自GCC以下编译器错误:AVL树最小值和最大值函数编译错误

错误:预期的构造函数,析构函数或类型之前,“*”标记

转换实现文件中的最小和最大函数声明都会收到错误。

以下两个成员函数的问题:

template <typename T> 
tree_t<T>::node_t* tree_t<T>::min(node_t* t) const 
{ 
    node_t *temp = t; 
    while(temp->left != NULL) 
    { 
    temp = temp->left; 
    } 
    return temp; 
} 

template <typename T> 
tree_t<T>::node_t* tree_t<T>::min(tree_t<T>::node_t*) const 
{ 
    node_t *temp = t; 
    while(temp->left != NULL) 
    { 
    temp = temp->left; 
    } 

    return temp; 
} 

以下是声明: 市民:

node_t*   min(node_t* t) const; 

    node_t*   max(node_t*) const; 

这里是类和node_t结构声明

template <typename T> 
class tree_t 
{ 
    private: 
struct node_t 
{ 
T data; 
node_t *left; 
node_t *right; 
int height; 
int bal; 

    node_t(const T& Element, node_t *lt, node_t *rt, int h = 0) 
    : data(Element), left(lt), right(rt), height(h) {}; 
    }; 
    node_t * root; 

回答

0

我无法重现确切的错误。但是,以下是您可以跟随的框架。这不是最好的:-),但它是编译的最接近的(即对原始代码进行最小更改)。

template <typename T> 
class tree_t 
{ 
    public: 

    struct node_t 
    { 
     T data; 
     node_t *left; 
     node_t *right; 
     int height; 
     int bal; 

     node_t(const T& Element, node_t *lt, node_t *rt, int h = 0) 
      : data(Element), left(lt), right(rt), height(h) { 
     } 
    }; 

    node_t * root; 

    node_t * min(node_t *) const { 
     return 0; // just for compilation sake 
    } 

}; 

int main() 
{ 
    typedef tree_t<int> int_tree; 
    typedef int_tree::node_t int_node; 

    int_tree my_int_tree; 
    int_node my_node(42, 0, 0); 

    int_node * min_node = my_int_tree.min(& my_node); 
    (void) min_node; 
}