besoin d'accéder à un objet de classe via un pointeur de fonction - Création de classe dans l'arborescence de recherche binaire
-
03-07-2019 - |
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?
La solution
Il semble que l'appel à inOrderPtr (this- > data)
ne fait que transmettre le membre data ??code> 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.