ошибка компиляции в возвращении указателя

голоса
0

У меня есть класс BST же , как и в этой теме

BST.hpp

template<class T> 
class BinarySearchTree
{
 private:
  struct tree_node
  {
    tree_node* left;
    tree_node* right;
    T data;

    tree_node( const T & thedata, tree_node * l = NULL, tree_node * r = NULL )
            : data( thedata ), left( l ), right( r ) { }
  };
tree_node* root;

public:
  //some functions
private:
  struct tree_node* minFunc( tree_node** node);
};

Я пытался вернуть указатель из функции , как это сделано в этой теме .

определение minFunc находится в том же файле BST.hpp

template <class T>
struct tree_node* BST<T>::minFunc(tree_node** node)
{
tree_node* current = *node;
while(current->left != NULL)
{
    current = current->left;
}
return current;
}

Невозможно выяснить ошибки компиляции :

ошибка C2143: синтаксическая ошибка: отсутствует «;» до '*'

C2065 ошибка: «Т»: необъявленный идентификатор

Ошибка C2955: «BST»: использование шаблона класса Requ я рес список аргументов шаблона

Ошибка C2509: «minFunc»: функция-член не объявлен в «BST»

все это указывает на определение

Задан 29/05/2011 в 11:29
источник пользователем
На других языках...                            


3 ответов

голоса
2

Мое предположение, что struct tree_nodeне видно. Это, вероятно , не объявлено / объявленный внутри некоторого класса.

Ответил 29/05/2011 в 11:37
источник пользователем

голоса
0

TreeNode частная структура в BST - вы не можете получить доступ к нему вне BST

Ответил 29/05/2011 в 11:38
источник пользователем

голоса
1

  1. Изменение этого заявления:

    структура tree_node * minFunc (tree_node ** узел);

в этом

tree_node* minFunc( tree_node** node);

Изменение этого определения соответственно.

  1. Двойной указатель верный признак плохого дизайна
  2. Вы включили в себя заголовок, определяющий STRUCT tree_node?

РЕДАКТИРОВАТЬ

Определение должно быть

template <class T>
typename BST<T>::tree_node* BST<T>::minFunc(tree_node** node)
{
tree_node* current = *node;
while(current->left != NULL)
{
    current = current->left;
}
return current;
}

Кстати, обратите внимание, что метод minFunc является приватным и не могу к нему доступ вне класса

Ответил 29/05/2011 в 12:03
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more