Ошибки компиляции функции минимального и максимального значений дерева AVL - PullRequest
0 голосов
/ 20 октября 2011

Я создаю простое дерево AVL и получаю следующую ошибку компилятора из GCC:

ошибка: ожидаемый конструктор, деструктор или преобразование типа до маркера '*'

И min, иМаксимальные объявления функций в файле реализации получают ошибки.

следующие две функции-члена являются предметом спора:

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;

1 Ответ

0 голосов
/ 20 октября 2011

Я не смог воспроизвести точную ошибку. Тем не менее, - это скелет, за которым вы можете следовать . Он не самый лучший :-), но он компилируется ближе всего (т. Е. Вносит минимальные изменения в исходный код).

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