Funktion aus Klasse aufrufen
-
@Timo_R sagte in Funktion aus Klasse aufrufen:
Fehlermeldung
Ich stelle mir auch die Frage, ob es sinnvoll sein kann, dass die Methode Callback_1(...) der Klasse MainWindow selbst wieder ein MainWindow zurückgibt.
-
ja - ich aber nur gerade an Funktionsaufrufen, Beispiel:
void Callback_2(Fl_Widget*, void* userdata) { ... }
Diese Funktion soll aus der Funktion noch einmal aufgerufen werden.
-
Ausdruck zum aufrufen, müsste so oder so ähnlich aussehen...
reinterpret_cast<void*>(&Callback_2) ....
-
@Timo_R Hast du den Link von @SeppJ gelesen? Ich tippe auf nein.
Weil ich Montags morgens noch halbwegs gut gelaunt bin, hier nochmal das Wichtigste:
Poste hier, einen Codeabschnitt, mit dem wir den Fehler reproduzieren können.
Erkläre was du erwartest und was statt dessen passiert. Poste Fehlermeldungen komplett: Als Text hier rein kopiert, keinen Screenshot!
-
void Callback_2(Fl_Widget*, void* userdata) { cout << userdata << endl; printf("Sie befinden sich in callback 2, userdata = '%s'\n", (const char*)userdata); if (userdata=="start") { static int x = 0; simulation_1->image(jpgs[x++ % TOTAL]); simulation_1->redraw(); Fl::repeat_timeout(RATE, Callback_2); // <--- Erneuter Aufruf der Funktion funktioniert nicht // Fl::add_timeout(RATE, Callback_2); printf("Simulation läuft ... \n"); } }
liefert
FEHLERMELDUNG
-
Zu spät gelesen - Fehlermeldung wird bei Bedarf nachgereicht ...
-
@Timo_R sagte in Funktion aus Klasse aufrufen:
Probiere mal folgendes:
void Callback_2(Fl_Widget* Widget, void* userdata) { cout << userdata << endl; printf("Sie befinden sich in callback 2, userdata = '%s'\n", (const char*)userdata); if (userdata=="start") { static int x = 0; simulation_1->image(jpgs[x++ % TOTAL]); simulation_1->redraw(); Fl::repeat_timeout(RATE, [&](void*) { Callback_2(Widget, userdata); }); printf("Simulation läuft ... \n"); } }
-
@Timo_R Die Fehlermeldung sagt, dass die Signatur die
repeat_timeout
für die Callback Funktion erwartet nicht zuCallback_2
passt.Ich kenne das Framework, welches du da benutzt jetzt nicht, aber mich wundert gerade etwas, das
Callback_2
sich selbst als Callback übergibt.
-
@ QUICHE LORRAINE:
liefertWie baue ich mir solch einen Ausdruck auf?
-
Wenn du das mit der Lambda-Funktion nicht hinbekommst, dann erzeuge eine benannte Funktion vom passenden Typ (den ersten Parameter
Fl_Widget*
benutzt du ja nicht und der 2. hat ja den passenden Typvoid*
) und rufe diese dann auf (das was ich oben schon bei der statischen Funktion gemacht habe).PS: Überlege noch mal den Vergleich bei
(userdata=="start")
- hier findet nur ein Adressvergleich statt, kein Stringvergleich.
Es kommt dann drauf an, ob der Compiler die Stringliterale optimiert, s. unterschiedliche Ergebnisse bei MSVC v19.latest und gcc 14.2: C++ Compiler Explorer Code.