compilați eroare în schimb indicatorul

voturi
0

Am clasa BST aceeași ca și în acest 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);
};

Am încercat să returneze un pointer la funcția așa cum face în acest thread .

definiția minFunc este în același fișier 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;
}

Nu se poate da seama de erorile de compilare :

error C2143: eroare de sintaxă: lipsă ';' inainte de '*'

C2065 eroare: 'T': identificator nedeclarat

eroare C2955: „BST“: utilizarea șablon clasa requ i res lista de argumente șablon

eroare C2509: „minFunc“: funcția de membru nu a declarat în „BST“

toate acestea indică spre definirea

Întrebat 29/05/2011 la 11:29
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
2

Presupunerile mea este că struct tree_nodenu este vizibil. Probabil nu este declarată / declarate în interiorul unei clase.

Publicat 29/05/2011 la 11:37
sursa de către utilizator

voturi
0

treenode este un struct privat în BST - nu se poate accesa în afara BST

Publicat 29/05/2011 la 11:38
sursa de către utilizator

voturi
1

  1. Schimbați această declarație:

    struct tree_node * minFunc (tree_node ** nod);

în această

tree_node* minFunc( tree_node** node);

Schimbarea aceasta este definiția în consecință.

  1. Dublu pointer este un semn sigur de design de rău
  2. Ați include un antet care definește struct tree_node?

EDITAȚI | ×

Definiția ar trebui să fie

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

de altfel, să ia o notă de faptul că metoda este minFunc acces privat și cant din afara clasei

Publicat 29/05/2011 la 12:03
sursa de către utilizator

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