Funktionspointer
-
Hi,
ich habe ein problem mit funktionspointern!klasse tree:
template <class T> class TREE { TREENODE<T> *root; int del (T wert, TREENODE<T> **wurzel); // interne del für del (T wert) int ins (T wert, TREENODE<T> *wurzel); // interne ins für ins (T wert) void preorder (void (*func) (T wert), TREENODE<T> *pos); // intern void inorder (void (*func) (T wert), TREENODE<T> *pos); // intern void postorder (void (*func) (T wert), TREENODE<T> *pos); // intern public: TREE (void); ~TREE (void); void ins (T wert); void del (T wert); int search (T wert); int empty (void); void preorder (void (*func) (T wert)); // Wurzel, linker Baum, rechter Baum void inorder (void (*func) (T wert)); // linker Baum, Wurzel, rechter Baum void postorder (void (*func) (T wert)); // linker Baum, rechter Baum, Wurzel };
der aufruf im destruktor:
template <class T> TREE<T> :: ~TREE (void) { postorder (del); }
leider geht das net
ich bekomme immer die fehlermeldung "[C++ Fehler] bintree.h(61): E2285 Keine Übereinstimmung für 'TREE<int>::postorder(int (TREE<int>::*)(int,TREENODE<int> * *))' gefunden."
-
du musst den Klassennamen mit angeben:
typedef void (TREE<t>::*funktion)(T); void postorder ( funktion f ) { T wert = ... ... (this->*f)( wert ); }
-
EDIT: war quatsch
-
Mit der oben vorgeschlagenen Lösung könntest du aber auch nur Funktionen übergeben, die Member der Klasse TREE (oder einer abgeleiteten Klasse) sind. Ich würde aus den Funktionen mit Callbacks zumindest Templates machen, die einen Funktor annehmen, und dann mit boost::bind o.Ä. die del-Methode von this übergeben.