se necesita acceso al objeto de clase mediante el puntero de función - Relacionado con la creación de clases del árbol de búsqueda binario
-
03-07-2019 - |
Pregunta
Creación de recorridos para el árbol de búsqueda binario con recursión.
void inOrder(void (*inOrderPtr)(T&))
{
if(this->left != NULL)
inOrder((*inOrderPtr)(this->left));
inOrderPtr(this->data);
if(this->right != NULL)
inOrder((*inOrderPtr)(this->right));
}
Aquí está la función. Ahora esto es obviamente incorrecto. Esta función se llama así:
first.inOrder(print_vals);
primero es el objeto, e imprimir vals es simplemente una función que imprime los datos del objeto. Hay tres valores para cada objeto, datos, izquierda y derecha. ¿Cómo accedo realmente a esos elementos con la función?
Solución
Parece que la llamada a inOrderPtr (this- > data)
está pasando solo el miembro data
del nodo del árbol al print_vals
función. Si desea acceder a los elementos left
y right
, use inOrderPtr (* this)
. Tendrá que cambiar varias declaraciones para que esto se compile, como las declaraciones para inOrderPtr
y print_vals
. Sin ver el resto de su código, es difícil decir a qué necesita cambiarlos.
En otra nota, me parece que es posible que desee escribir las llamadas recursivas más así:
this->left->inOrder(inOrderPtr);
Sin embargo, estoy haciendo suposiciones sobre su implementación.