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

StackOverflow https://stackoverflow.com/questions/206498

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top