è necessario accedere all'oggetto classe tramite il puntatore a funzione - Correlazione della creazione della classe dell'albero della ricerca binaria

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

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top