0

単純な AVL ツリーを作成していますが、GCC から次のコンパイラ エラーが発生します。

エラー: '*' トークンの前にコンストラクタ、デストラクタ、または型変換が必要です

実装ファイルの最小関数宣言と最大関数宣言の両方でエラーが発生します。

次の 2 つのメンバー関数が問題になっています。

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

1 に答える 1

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