2011-10-19 44 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; 
}