Compilatiefout in ruil pointer

stemmen
0

Ik heb de BST klasse hetzelfde als in deze thread

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

Ik probeerde een pointer terug te keren van de functie als gedaan in deze thread .

de definitie van minFunc in dezelfde BST.hpp bestand

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

Niet in staat te achterhalen van de compileerfouten :

error C2143: syntaxis fout: het missen ';' voor '*'

error C2065: 'T': zwartwerk identifier

error C2955: 'BST': het gebruik van klasse template requ i res template lijst met argumenten

error C2509: 'minFunc': lid functie niet in 'BST' verklaard

deze wijst naar de definitie

De vraag is gesteld op 29/05/2011 om 11:29
bron van user
In andere talen...                            


3 antwoorden

stemmen
2

Mijn beste gok is dat struct tree_nodeniet zichtbaar is. Het is waarschijnlijk niet verklaard / gedeclareerd binnen enkele klasse.

antwoordde op 29/05/2011 om 11:37
bron van user

stemmen
0

TreeNode is een prive-structuur in BST - je kunt het niet buiten BST toegang

antwoordde op 29/05/2011 om 11:38
bron van user

stemmen
1

  1. Wijzig deze verklaring:

    struct tree_node * minFunc (tree_node ** knooppunt);

in dit

tree_node* minFunc( tree_node** node);

Verander het definitie dienovereenkomstig.

  1. Double pointer is een zeker teken van slecht ontwerp
  2. Heeft u een header definiëren struct tree_node bevatten?

BEWERK

De definitie moet

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

By the way, neem een ​​notitie dat de methode minFunc is prive en cant toegang tot het buiten de klas

antwoordde op 29/05/2011 om 12:03
bron van user

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