Errore di compilazione nel ritorno puntatore

voti
0

Ho la classe BST stessa come in questa discussione

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

Stavo cercando di restituire un puntatore dalla funzione, come fatto in questa discussione .

la definizione di minFunc è nello stesso file 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;
}

Incapace di capire i errori di compilazione :

errore C2143: errore di sintassi: manca ';' prima '*'

Errore C2065: 'T': identificatore non dichiarato

Errore C2955: 'BST': utilizzo di template di classe requ i res lista degli argomenti template

Errore C2509: 'minFunc': funzione di membro non dichiarato in 'BST'

tutti questi indicando la definizione

È pubblicato 29/05/2011 alle 11:29
fonte dall'utente
In altre lingue...                            


3 risposte

voti
2

La mia ipotesi migliore è che struct tree_nodenon è visibile. Non è probabilmente dichiarato / dichiarata all'interno di una certa classe.

Risposto il 29/05/2011 a 11:37
fonte dall'utente

voti
0

TreeNode è una struttura privata nel BST - non è possibile accedervi dall'esterno BST

Risposto il 29/05/2011 a 11:38
fonte dall'utente

voti
1

  1. Cambiare questa dichiarazione:

    struct tree_node * minFunc (tree_node ** nodo);

in questo

tree_node* minFunc( tree_node** node);

Cambiarlo di definizione di conseguenza.

  1. Doppio puntatore è un segno sicuro di una cattiva progettazione
  2. Hai incluso un colpo di testa che definisce struct tree_node?

MODIFICARE

La definizione dovrebbe essere

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

tra l'altro, prendere nota che il metodo minFunc è l'accesso privato e non posso che al di fuori della classe

Risposto il 29/05/2011 a 12:03
fonte dall'utente

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