error de compilación a cambio de puntero

votos
0

Tengo la clase BST mismo que en este hilo

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

Yo estaba tratando de devolver un puntero de la función de como se hace en este hilo .

la definición de minFunc está en el mismo archivo 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;
}

No se ha podido averiguar los errores de compilación :

error C2143: error de sintaxis: falta ';' antes de '*'

C2065 error: 'T': identificador no declarado

error C2955: 'BST': uso de la plantilla de clase requ i res lista de argumentos de plantilla

C2509 de error: 'minFunc': función miembro no declarado en 'BST'

todo esto apunta a la definición

Publicado el 29/05/2011 a las 11:29
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
2

Mi mejor conjetura es que struct tree_nodeno es visible. Es probable que no declaró / declarada dentro de algunas clases.

Respondida el 29/05/2011 a las 11:37
fuente por usuario

votos
0

NodoArbol es una estructura privada en BST - no se puede acceder a él fuera de BST

Respondida el 29/05/2011 a las 11:38
fuente por usuario

votos
1

  1. Cambiar esta declaración:

    struct tree_node * minFunc (tree_node ** nodo);

dentro de esto

tree_node* minFunc( tree_node** node);

Cambiar su definición en consecuencia.

  1. Doble puntero es un signo seguro de un mal diseño
  2. ¿Incluyó una cabecera que define tree_node estructura?

EDITAR

La definición debe ser

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

dicho sea de paso, tomar nota de que el método es minFunc acceso privado y no puede fuera de la clase

Respondida el 29/05/2011 a las 12:03
fuente por usuario

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