Function Pointer bzw. Callback Problem



  • hi,

    ich arbeite mit GTK+ und versuche gerade eine callback-funktion für meinen TCP-Socket zu verwenden. Allerdings bekomm ich ne Fehlermeldung beim Kompilieren. Habe jetzt mal den Teil mit dem Fehler hier reinkopiert:

    bool TestApp::createConnection(int timeout_seconds, bool startup) {
          //...
          GIOChannel *socket_chan = g_io_channel_unix_new(m_socket.getRawSocket());    
          guint sourceID = g_io_add_watch(socket_chan, G_IO_IN, &TestApp::onDataAvailable, NULL);   // FEHLER
    
          return true;
    }
    
    gboolean TestApp::onDataAvailable(GIOChannel *gio, GIOCondition condition, gpointer data)
    {
    //...
    }
    

    Die Funktion onDataAvailable wird also als Callback registriert und sollte aufgerufen werden, sobald Daten am Socket anliegen. Nachdem ich mich allerdings mit Function Pointer nicht wirklich gut auskenne scheitere ich an folgender Meldung:

    Fehler: »gboolean (TestApp::)(GIOChannel, GIOCondition, void*)« kann nicht nach »gboolean ()(GIOChannel, GIOCondition, void*)« für Argument »3« nach »guint g_io_add_watch(GIOChannel*, GIOCondition, gboolean ()(GIOChannel, GIOCondition, void*), void*)« umgewandelt werden



  • Hallo,

    g_io_add_watch verlangt nach einer freien Funktion, du übergibst aber eine Memberfunktion von TestApp. Wenn es möglich ist mache die Funktion doch static.



  • ok, danke, das wars.
    konnte zwar die funktion nicht static machen, hab jetzt aber einfach ne neue static funktion geschrieben und die als callback registriert. diese ruft dann einfach nur die eigentliche nicht-static funktion auf. ist das der "normale" weg oder macht man sowas grundsätzlich anders?



  • edwood schrieb:

    ist das der "normale" weg oder macht man sowas grundsätzlich anders?

    Dieser Weg ist durchaus üblich, viele andere Möglichkeiten hast du auch nicht.

    cu André


Anmelden zum Antworten