Problem mit Funktionspointern
-
Hallo zusammen,
ich habe folgende Funktionsdeklaration:
int search( int (*err_func) (integer *m_ptr, integer *n_ptr, doublereal *params, doublereal *err, integer *iflag), integer mode=1 );In meiner Klasse habe ich dann eine entsprechende Funktion:
int levenbergMarquardtErrorFunc(integer *m_ptr, integer *n_ptr, doublereal *params, doublereal *err, integer *iflag);Diese versuche ich nun an search zu übergeben:
nlOpt.search(&ViewpointTransform::levenbergMarquardtErrorFunc);Leider mit folgendem Ergebnis:
cannot convert parameter 1 from 'int (__thiscall ViewpointTransform::* )(integer *,integer *,doublereal *,doublereal *,integer *)' to 'int (__cdecl *)(integer *,integer *,doublereal *,doublereal *,integer *)'Wenn ich reine C-Funktionen übergebe, dann gehts. Warum klappt das mit Memberfunktionen nicht?
Danke für Eure Hilfe!
-
(Nichtstatische) Memberfunktionen beziehen sich immer auf ein konkretes Objekt und müssen daher anders behandelt werden als gewöhnliche Funktionen. Wenn du dieses Problem nicht selber gesehen hast, solltest du dich fragen, ob
levenbergMarquardtErrorFunc überhaupt eine gewöhnliche Memberfunktion deiner Klasse sein sollte. Alles was dein Herz zu dem Thema begehrt, findest du hier:
http://www.parashift.com/c++-faq-lite/pointers-to-members.htmlP.S.: Warum so viel gepointere in deinem Programm?
-
Weil Memberfunction Pointer und normale Function Pointer unterschiedlich sind. Ein Memberfunction Pointer braucht ein Objekt um gerufen werden zu können.
Edit: zu spät...
-
SeppJ schrieb:
P.S.: Warum so viel gepointere in deinem Programm?
Die search-Funktion ist Teil eines Pakets zur Optimierung und so vom Prof. vorgegeben.
Danke für Eure Hilfe!