Chyba kompilace ve oplátku ukazatelem

hlasů
0

Mám třídu BST stejný jako v tomto vlákně

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

Snažil jsem se vrátit ukazatel z funkce jako hotové v tomto vlákně .

Definice minFunc je ve stejném souboru 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;
}

Nelze přijít na chyby kompilace :

error C2143: Chyba syntaxe: chybí ';' před '*'

Chyba C2065: 'T': nedeklarovaný identifikátor

Chyba C2955: ‚BST‘: použití šablony třídy requ i res šablony seznam argumentů

Chyba C2509: ‚minFunc‘: členská funkce, které nejsou prohlášeny za ‚BST‘

to vše ukazuje na definici

Položena 29/05/2011 v 11:29
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

Můj nejlepší odhad je, že struct tree_nodenení vidět. Je to asi nebude prohlášena / prohlášena uvnitř nějaké třídy.

Odpovězeno 29/05/2011 v 11:37
zdroj uživatelem

hlasů
0

TreeNode je soukromá struct v BST - nelze přistupovat mimo BST

Odpovězeno 29/05/2011 v 11:38
zdroj uživatelem

hlasů
1

  1. Změnit toto prohlášení:

    struct tree_node * minFunc (tree_node ** uzel);

do toho

tree_node* minFunc( tree_node** node);

Měnit jejich definici způsobem.

  1. Double ukazatel je jistá známka špatného návrhu
  2. Věděli jste obsahovat záhlaví, definující struct tree_node?

UPRAVIT

Tato definice by měla být

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

Mimochodem, vezměte na vědomí, že tento způsob minFunc je soukromý a převýšení přístup je mimo třídu

Odpovězeno 29/05/2011 v 12:03
zdroj uživatelem

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