è necessario accedere all'oggetto classe tramite il puntatore a funzione - Correlazione della creazione della classe dell'albero della ricerca binaria
-
03-07-2019 - |
Domanda
Creazione di attraversamenti per l'albero di ricerca binario con ricorsione.
void inOrder(void (*inOrderPtr)(T&))
{
if(this->left != NULL)
inOrder((*inOrderPtr)(this->left));
inOrderPtr(this->data);
if(this->right != NULL)
inOrder((*inOrderPtr)(this->right));
}
Ecco la funzione. Ora questo è ovviamente sbagliato. Questa funzione si chiama così:
first.inOrder(print_vals);
innanzitutto è l'oggetto e print vals è semplicemente una funzione che stampa quali sono i dati nell'oggetto. Esistono tre valori per ciascun oggetto, dati, sinistra e destra. Come accedo effettivamente a quegli elementi con la funzione?
Soluzione
Sembra che la chiamata a inOrderPtr (this- > data)
stia passando solo il membro data
del nodo dell'albero al print_vals
funzione. Se desideri accedere agli elementi left
e right
, usa inOrderPtr (* this)
. Dovrai modificare varie dichiarazioni per poterlo compilare, come le dichiarazioni per inOrderPtr
e print_vals
. Senza vedere il resto del codice è difficile dire in cosa devi cambiarlo.
In un'altra nota, mi sembra che potresti voler scrivere le chiamate ricorsive più in questo modo:
this->left->inOrder(inOrderPtr);
Tuttavia, sto formulando ipotesi sulla tua implementazione.