ошибка компиляции при возврате указателя - PullRequest
0 голосов
/ 29 мая 2011

У меня класс 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: 'T': необъявленный идентификатор

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

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

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

Ответы [ 3 ]

2 голосов
/ 29 мая 2011

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

1 голос
/ 29 мая 2011
  1. Измените это объявление:

    struct tree_node * minFunc (узел tree_node **);

в это

tree_node* minFunc( tree_node** node);

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

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

EDIT

Кстати, определение должно быть

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 является закрытым и не может получить к нему доступ вне класса

0 голосов
/ 29 мая 2011

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

...