error C3867 Funktion aus einer Klasse aufrufen
-
Hallo,
habe folgendes Problem...und zwar hab ich mir eine Klasse gebaut die heißt
#ifndef __OPENCAM_H #define __OPENCAM_H #include "Fl_Files.h" class OpenCam { public: OpenCam(Fl_OpenCV*, Fl_Scroll*, bool); void Playing_CB(); }; // #endif //__OPENFILE_H#include "../h/OpenCam.h" #include "../h/allFiles.h" Fl_Capture Cap; bool playing; OpenCam::OpenCam(Fl_OpenCV* temp, Fl_Scroll* Board, bool playing){ if( !Cap.CaptureFromCAM(0) ) return; temp->SetImage(Cap.GetFrame()); Board->redraw(); playing=true; Fl::add_timeout(0.05, Playing_CB); } void OpenCam::Playing_CB(){ if(playing==false) return; img=Cap.GetFrame(); temp->SetImage(img); Fl::wait(0); Fl::add_timeout(0.01, Playing_CB); }Und habe ich das Problem das bei der Zeile
Fl::add_timeout(0.05, Playing_CB);
die Fehlermeldung kommt
error C3867: "OpenCam::Playing_CB": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&OpenCam::Playing_CB", um einen Zeiger auf den Member zu erstellen.add_timeput(double t, Fl_timeout_Handler, void* =0)
Kennt jemand das Problem?????
-
Lesen hilft:
funscripter1983 schrieb:
Verwenden Sie "&OpenCam::Playing_CB", um einen Zeiger auf den Member zu erstellen.
-
...auf die Idee bin ich auch gekommen!!
Da es nicht funktioneirte habe ich gedacht ich Frag hier mal nach

...wenn ich
void &OpenCam::Playing_CB(){...bekomme ich folgenden Fehler
Fehler 33 error C2556: 'int &OpenCam::Playing_CB(void)': Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'void OpenCam::Playing_CB(void)
-
Kann es sein das Du in der "Playing_CB" definition ein argument vergessen hast versuche mal
void OpenCam::Playing_CB( void* ) {
..
..
..
}gruß
PS : Zumindest spuckt g**gle für die definition von Fl_timeout_Handler folgendes aus
typedef void (*Fl_Timeout_Handler)(void*);
-
...hab ich auch schon versucht.
Dann bringt er mir aber diese Fehlermeldung
"error C3867 OpenCam::Playing_CB": Dem Funktionsaufruf fehlt die Argumentenliste. Verwenden Sie &OpenCam::Playing_CB", um einen Zeiger auf den Member zu erstellen"
...wenn ich dann
&OpenCam::Playing_CB(void *){
...
}bekomm ich Fehler "C2182: Playing_CB: Unzulässige Verwendung des Types 'void'"
und den Fehler "C2556" int &OpenCam::Playing_CB(void): Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'void OpenCam::Playing_CB(void)"**...wobei der Fehler C3867 bleibt...dreh mich da ein bischen im Kreis herum!!

-
Du sollst nicht bei der Funktionsdeklaration ein & hinzufügen. Du sollst beim Aufruf von add_timeout &OpenCam::Playing_CB statt Playing_CB schreiben.
-
...entweder bin ich zu dumm dafür oder das klappt nicht.
OpenCam::OpenCam(Fl_OpenCV* Pict, Fl_Scroll* Board){ copy_Pict = Pict; if( !Cap.CaptureFromCAM(0) ) return; Pict->SetImage(Cap.GetFrame()); Board->redraw(); playing=true; Fl::add_timeout(0.05, &OpenCam::Playing_CB); } void OpenCam::Playing_CB(){ if(playing==false) return; img=Cap.GetFrame(); copy_Pict->SetImage(img); Fl::wait(0); Fl::add_timeout(0.01, &OpenCam::Playing_CB); }Fehlermeldung
Fehler 31 error C2664: 'Fl::add_timeout': Konvertierung des Parameters 2 von 'void (__thiscall OpenCam:: )(void)' in 'Fl_Timeout_Handler' nicht möglich*...und nun?!

Hab es bis jetzt als normale Funktion deklariert...funktioniert auch soweit bis auf dass, das es kein richtiger Callback ist...
-
wie schon geschrieben, falls der callback so definiert is
typedef void (*Fl_Timeout_Handler)(void*);muss die funktion so aussehen
void Playing_CB(void* irgendwas) { // ... } //... Fl::add_timeout(0.01, &Playing_CB);die funktion darf keine memberfunktion sein.
müsstest also sowas machenvoid Playing_CB(void* openCam){ OpenCam* oc = (OpenCam*)openCam; if(oc->Playing()==false) return; ... } void OpenCam::OpenCam(Fl_OpenCV* Pict, Fl_Scroll* Board){ Fl::add_timeout(0.05, &Playing_CB, this); // der 3. parameter wird Playing_CB übergeben (siehe oben) }
-
...hab es jetzt doch wieder so gemacht wie ichs hatte.
So wie ihoernchen es auch macht.
DANKE AN ALLE für eure Hilfe
