0

我正在构建一个简单的 AVL 树,并从 GCC 收到以下编译器错误:

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

实现文件中的 min 和 max 函数声明都会收到错误。

以下两个成员函数存在问题:

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;
}

这是声明:public:

  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;
4

1 回答 1

0

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

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;
}
于 2011-10-19T22:07:08.327 回答