skompilować błąd w zamian wskaźnik

głosy
0

Mam klasę BST sam jak w tym wątku

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

Starałem się zwracają wskaźnik z funkcji, tak jak w tym wątku .

definicja minFunc jest w tym samym pliku 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;
}

Nie można dowiedzieć się błędy kompilacji :

error C2143: syntax error: brakuje ';' przed '*'

error C2065: 'T': identyfikator nielegalna

error C2955: 'BST': wykorzystanie klasy szablonu requ i res listę argumentów szablonu

error C2509: 'minFunc': funkcja członek nie zadeklarowane w 'BST'

wszystko wskazuje na definicji

Utwórz 29/05/2011 o 11:29
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
2

Mój najlepszy przypuszczenie to, że struct tree_nodenie jest widoczny. Jest to prawdopodobnie nie zadeklarował / deklarowane wewnątrz jakiejś klasy.

Odpowiedział 29/05/2011 o 11:37
źródło użytkownik

głosy
0

TreeNode jest prywatnym struct w BST - nie można uzyskać do niego dostęp poza BST

Odpowiedział 29/05/2011 o 11:38
źródło użytkownik

głosy
1

  1. Zmienić tę deklarację:

    Struct tree_node * minFunc (tree_node ** węzła);

zaangażowany w to

tree_node* minFunc( tree_node** node);

Zmienić jego definicji odpowiednio.

  1. Podwójny wskaźnik jest oznaką złej konstrukcji
  2. Czy zawierać nagłówek określający struct tree_node?

EDYTOWAĆ

Definicja ta powinna być

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

nawiasem mówiąc, wziąć pod uwagę, że metoda minFunc jest prywatny i cant dostęp go poza klasą

Odpowiedział 29/05/2011 o 12:03
źródło użytkownik

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