Funktion die andere Funktion über Zeiger aufruft innerhalb einer Klasse
-
Hallo, ich hoffeine Thread Beschreibung zum Thema passt.
Bei obj.call( obj.print ); bekomme ich:
[C++ Fehler] Unit1.cpp(25): E2034 Konvertierung von 'int (* (_closure )())()' nach 'int (*)()' nicht möglich [C++ Fehler] Unit1.cpp(25): E2342 Keine Übereinstimmung des Typs beim Parameter 'func' ('int (*)()' erwartet, 'void' erhalten) [C++ Warnung] Unit1.cpp(43): W8070 Funktion sollte einen Wert zurückgebenWie macht man das richtig?
#include <iostream> #include <vector> using namespace std; class win { public: int print(); int call ( int (*func)() ); }; int print_2 (); int main() { win obj; obj.call( &print_2 ); // Funktioniert obj.call( obj.print ); system("PAUSE"); } //--------------------------------------------------------------------------- int win :: print() { cout<<"ok aus class"; return 0; } int win :: call ( int (*func)() ) { func(); } int print_2() { cout<<"ok"; return 0; }
-
Nichtstatische Memberfunktionen operieren auf einem Objekt, sie haben einen unsichtbaren "this" Parameter, also würde das "print()" erweitert zu "print(win* this)". Du könntest die Funktion z.B. statisch machen. (Und dann einen solchen Pointer "manuell" mitgeben, falls gewollt.)
Oder du liest: http://www.parashift.com/c++-faq-lite/pointers-to-members.html
-
Das, was du willst ist ein Methodenzeiger...
call müsste wie folgt deklariert werden:int call ( int (win::*func)() );Beim Aufruf muss es dann auch
obj.call(&win::print);heißen.