Callback funktion
-
Ich habe folgendes Problem, dass ich in einer Callback funktion aufrufen moechte dabei aber immer wieder einen compilerfehler kriege dass die definierten funktionen nicht uebereinstimmen:
//pfring.h ... typedef void (*pfringProcesssPacket)(const struct pfring_pkthdr *h, const u_char *p, const u_char *user_bytes); ...//test.h class Test { private: void testMethod(); void inc(const struct pfring_pkthdr *h, const unsigned char *pack, const unsigned char *user_bytes); };void Test::inc(const struct pfring_pkthdr *h, const unsigned char *pack, const unsigned char *user_bytes) { ... } void Test::testMethod() { ... pfring p = pfring_open(...); pfring_loop(p, inc, (unsigned char*)NULL, 0); ... }Fehler:
error: argument of type ‘void (Test::)(const pfring_pkthdr*, const unsigned char*, const unsigned char*)’ does not match ‘pfringProcesssPacket {aka void (*)(const pfring_pkthdr*, const unsigned char*, const unsigned char*)}’
-
Das ist C.
-
IrgendeinName schrieb:
Das ist C.
In C gibts kein class.
@Ersteller: mach die Methode Test::inc static. Da sie momentan nicht static ist, wird ein Objekt benötigt, das übergibst du aber nicht und die Signatur passt auch nicht zu der Methode (da diese immer an ein Objekt gebunden ist).
-
Das sind c++ dateien, die einzige pfring.h Header ist in c aber das sollte kein Problem sein!?
-
Freaky123 schrieb:
Das sind c++ dateien, die einzige pfring.h Header ist in c aber das sollte kein Problem sein!?
Sicher kannst du es zum laufen bringen, ist aber allgemein keine so gute Idee C und C++ zu mischen.
-
Hast du vlt ne Idee wieso ich den Compiler Fehler krieg soweit ichs versteh stimmen die Definition in der pfring.h mit der in Test.c nicht ueberein odr?
-
Freaky123 schrieb:
Hast du vlt ne Idee wieso ich den Compiler Fehler krieg soweit ichs versteh stimmen die Definition in der pfring.h mit der in Test.c nicht ueberein odr?
Ein Zeiger auf eine Funktion ist etwas ganz was anderes, als eine Zeiger auf eine Memberfunktion. Oder anders gesagt: Beantworte doch mal die Frage, auf welcher Instanz von Test dein Zeiger aufgerufen werden soll.
-
Wie koennte man den den Aufruf den auf die Memberfunktion anpassen?
-
Hier Beispiele zur Veranschaulichung, was gemeint ist:
#include <iostream> using namespace std; class foo { public: void test() const {cout << "test" << endl;} static void test_static() {cout << "test static" << endl;} }; typedef void (foo::*bar)() const; typedef void (*bar_static)(); int main() { bar foobar = &foo::test; (foo().*foobar)(); bar_static foobar_static = &foo::test_static; foobar_static(); return 0; }
-
Sorry da komm ich aber jetzt nicht ganz mit, muesste ich bei mir also den Aufruf auf die callback funktion anders machen?
-
Freaky123 schrieb:
Sorry da komm ich aber jetzt nicht ganz mit, muesste ich bei mir also den Aufruf auf die callback funktion anders machen?
Wie gesagt:
klassenlehrer schrieb:
@Ersteller: mach die Methode Test::inc static
-
Hat funktioniert
vielen Dank an alle fuer die Hilfe
-
Freaky123 schrieb:
Hat funktioniert
vielen Dank an alle fuer die HilfeIrgendwie bin ich mir nicht sicher, ob dir damit wirklich geholfen wurde. entweder hast du nämlich nicht verstanden was durch das static nun anders ist oder du hättest die Methode gar nicht erst als Klassenmember machen sollen.