besoin d'accéder à un objet de classe via un pointeur de fonction - Création de classe dans l'arborescence de recherche binaire

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

Question

Création de traversées pour une arborescence de recherche binaire avec récursivité.

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

Voici la fonction. Maintenant, c'est évidemment faux. Cette fonction s'appelle comme ceci:

first.inOrder(print_vals);

est d’abord l’objet, et print vals est simplement une fonction qui imprime les données contenues dans l’objet. Il existe trois valeurs pour chaque objet, données, gauche et droite. Comment puis-je accéder à ces éléments avec la fonction?

Était-ce utile?

La solution

Il semble que l'appel à inOrderPtr (this- > data) ne fait que transmettre le membre data du nœud d'arborescence à print_vals fonction. Si vous souhaitez accéder aux éléments left et right , utilisez inOrderPtr (* this) . Pour compiler cette information, vous devrez modifier diverses déclarations, telles que les déclarations pour inOrderPtr et print_vals . Sans voir le reste de votre code, il est difficile de dire en quoi vous devez le changer.

Sur une autre note, il me semble que vous voudrez peut-être écrire les appels récursifs plus comme ceci:

this->left->inOrder(inOrderPtr);

Je fais des hypothèses sur votre mise en œuvre, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top