Probleme beim Compilieren

Das Forum fĂĽr Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

Probleme beim Compilieren

Beitragvon Marcel » Fr 13 Dez, 2002 12:13

<HTML>Hallo,

ich habe folgendes Problem.
Ich habe in meinem Programm folgendes stehen:
XtAddCallback(draw_area,XmNexposeCallback,(XtCallbackProc)handle_ExposeCB,(XtPointer)this);

Der compiler meldet daraufhin:

graphwindow.cpp:13: no matches converting function `handle_ExposeCB' to type `void (*)(_WidgetRec *, void *, void *)'
../include/graphwin.h:26: candidates are: void graphwindow::handle_ExposeCB(_WidgetRec *, void *, void *)

Obwohl es aber die Funktion gibt und so def. ist:
void graphwindow::handle_ExposeCB(Widget w ,XtPointer data,XtPointer a)
{......}

Wenn ich in der .h-Datei die Funktion auf static setzte, kommt die Meldung nicht mehr. Das ist aber keine Lösung, da dann viele andere Fehler kommen. Wie dieser:

invalid use of member `screen::event' in static member function


Kann mir irgend jemand helfen?

Liegt es vielleicht am Compiler?

Vielen Dank fĂĽr eure MĂĽhe!!!

Marcel


PS: Ich benutze Suse 8.0</HTML>
Marcel
 

RE: Probleme beim Compilieren

Beitragvon mad » Fr 13 Dez, 2002 18:08

hm, eher schon ein zeitl her das c++ zeugs bei mir,
aber ...

> XtAddCallback(draw_area,XmNexposeCallback,(XtCallbackProc)handle_ExposeCB,(XtPointer)this);

ich glaub kaum dass obiges konstrukt so ohne weiteres funktionieren kann

imho werden callbacks (also pointer auf funktionen) doch spaeter einfach nur
dereferenziert und damit ausgefuehrt, wobei sie eben noch den XtPointer auf die
client-daten ubergeben bekommen ...

so weit so gut, aber wie soll das mit einer nonstatic-class-member-function gehn?
die braucht schliesslich ein objekt auf das sie angewendet werden kann ... der hilfts
ja nix, wenn sie das objekt (eben deinen "this" pointer) als XtPointer "a" uebergeben bekommt.

... c und c++ code mischen war immer schon bisserl "alternativ" :-)

aber die einzige moeglichkeit die ich da seh is, dass du dir eine static member
function (oder auch ne eigenstaendige simple c funktion ausserhalb einer klasse; evtl. als friend function)
als wrapper schreibst, die dann als callback funktion den this pointer als XtPointer uebergeben bekommt,
den anschliessend vernunftig castet (dann hast ein objekt auf das member-functions
ausfuehren kannst!, den gecastetn pointer dereferenziert und schliesslich die
entsprechende member function ausfuehrst (mit dem ganzen restlichen parameter-zeugs
was halt noch brauchst) ...

klingt alternativ, is es auch ... und keine ahnung ob das alles ueberhaupt
sinn macht oder nicht .. falls es totaler schwachsinn is, vergiss am besten gleich
dass ichs geschrieben hab *g*

hth,
mad.
mad
 


ZurĂĽck zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste