Author Topic: Fehlermeldung bei QT5 (5.13)  (Read 1977 times)

SigvaldS

  • Newbie
  • *
  • Posts: 4
    • View Profile
Fehlermeldung bei QT5 (5.13)
« on: August 05, 2019, 19:25:50 »
Hi,
ich versuche gerade den Beispielcode der Wetterstation (in C) unter QT5 ans Laufen zu bekommen.
Der reine C-Code funktioniert einwandfrei, auch wenn QTCreator etliche Warnings rausschmeißt.
Allerding an diesen Zeilen scheitere ich.
ipcon_register_callback(&ws.ipcon, IPCON_CALLBACK_ENUMERATE, (void *) cb_enumerate(), &ws);
    ipcon_register_callback(&ws.ipcon, IPCON_CALLBACK_CONNECTED, (void *) cb_connected(), &ws);

Aus der Fehlermeldung :cannot cast from type 'void' to pointer type 'void'
werde ich nicht so wirklich schlau.

Wahrscheinlich ganz einfach. Kann mir bitte wer auf die Sprünge helfen?

rtrbt

  • Tinkerforge Staff
  • Administrator
  • Full Member
  • *****
  • Posts: 121
    • View Profile
Re: Fehlermeldung bei QT5 (5.13)
« Reply #1 on: August 05, 2019, 19:34:40 »
Versuch es mal ohne die () hinter cb_enumerate und cb_connected.

SigvaldS

  • Newbie
  • *
  • Posts: 4
    • View Profile
Re: Fehlermeldung bei QT5 (5.13)
« Reply #2 on: August 06, 2019, 10:01:36 »
Danke für die Antwort.
Hilft leider auch nicht. Neue Fehlermeldung:
Fehler: reference to non-static member function must be called; did you mean to call it with no arguments?
Nehme ich die Klammer um void raus --
Fehler: indirection requires pointer operand ('void' invalid)

Mein Problem ist, dass ich nicht nachvollziehen kann was hier genau gewollt ist.
Leider ist die Doku da nicht sehr hilfreich.

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.467
    • View Profile
Re: Fehlermeldung bei QT5 (5.13)
« Reply #3 on: August 06, 2019, 11:01:56 »
Die *_register_callback Funktionen erwarten C Funktions-Pointer. Du versucht da aber einen Pointer auf eine C++ Methode zu übergeben. Der Unterschied zwischen einer C Funktion und einer C++ Methode ist der this Pointer.

Der übliche Weg das zu regeln ist über den Umweg einer statischen C++ Methode, die wie eine C Funktion auftreten kann, da sie keinen this Pointer hat.

Im angehängten Beispiel wird die statische C++ Methode cb_enumerate_static bei der IP Connection registriert und als user_data wird der this Pointer mitgegeben.

Die cb_enumerate_static Methode nimmt dann den per user_data übergebenen this Pointer und ruft damit die C++ Methode cb_enumerate auf.

SigvaldS

  • Newbie
  • *
  • Posts: 4
    • View Profile
Re: Fehlermeldung bei QT5 (5.13)
« Reply #4 on: August 07, 2019, 10:57:35 »
Danke,
soweit funktioniert Ihr Beispiel.
Allerding muss ich noch Anpassungen für das Einbinden in die GUI vornehmen.