benötigen Zugriff auf Klassenobjekt über Funktionspointer - Binary Search Tree-Klasse Creation Related

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

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top