benötigen Zugriff auf Klassenobjekt über Funktionspointer - Binary Search Tree-Klasse Creation Related
-
03-07-2019 - |
Frage
Erstellen von Überquerungen für binären Suchbaum mit Rekursion.
void inOrder(void (*inOrderPtr)(T&))
{
if(this->left != NULL)
inOrder((*inOrderPtr)(this->left));
inOrderPtr(this->data);
if(this->right != NULL)
inOrder((*inOrderPtr)(this->right));
}
Hier ist die Funktion. Nun ist dies offensichtlich falsch. Diese Funktion wird wie folgt aufgerufen:
first.inOrder(print_vals);
erste ist das Objekt, und Druck vals ist einfach eine Funktion, die druckt, was die Daten in dem Objekt. Es gibt drei Werte für jedes Objekt, Daten, links und rechts. Wie greife ich auf diese Elemente tatsächlich mit der Funktion?
Lösung
Es sieht aus wie der Aufruf von inOrderPtr(this->data)
nur das data
Mitglied des Baumknoten auf die print_vals
Funktion ist vorbei. Wenn Sie die left
und right
Elemente zugreifen möchten, verwenden Sie inOrderPtr(*this)
. Sie müssen verschiedene Erklärungen ändern, um für diese, wie die Erklärungen für inOrderPtr
und print_vals
zu kompilieren. Ohne den Rest des Codes zu sehen, ist es schwer zu sagen, was Sie brauchen, um sie zu ändern.
Auf einer anderen Anmerkung, scheint es mir, dass Sie die rekursive Aufrufe eher wie dieses schreiben möchten:
this->left->inOrder(inOrderPtr);
Ich mache Annahmen über die Implementierung, though.