Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Callback-Routine: nur statische Funktionen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.05.2005, 15:31 Uhr
~e1sbaer
Gast


Hallo, ich habe zwar schon mal das ganze im bereich OpenGL gepostet, aber ich denke, es ist ein allgemeines Problem. Ich habe versucht mir eine Klasse (Window) zu bauen, die mit GLUT ein Fenster erzeugt. Dem entsprechend wollte ich auch eine Member-Function als Callback-Routine registrieren, um auf reshapes reagieren zu können. Der Compiler gibt nun folgenden Fehler aus:

Zitat:
ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say `&Window::reshape'


Muss die Funktion static sein, damit ich einen Pointer auf die Funktion setzen kann? Dies wäre aber recht doof, da später von dieser Klasse mehrere Instanzen gleichzeitig laufen und da jede ihre eigene Callback-Routine haben soll.

Hatte auch mal versucht, wie der Compiler sagt &Window::reshape zu verwenden. Hier bekomme ich dann diesen Fehler:

Zitat:
cannot convert `void (Window::*)(int, int)' to `void (*)(int, int)' for argument `1' to `void glutReshapeFunc(void (*)(int, int))'


Ich weiß nicht mehr weiter bei diesem Problem. Hat jemand von euch eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.05.2005, 16:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja callback-funktionen müssten statisch sein (globale funktionen sind das sozusagen) normalerweise kann man das so hinbiegen das man als einen parameter die instanz geliefert kriegt mit welcher man dann arbeiten kann. Ansonsten musste schon ob du das nicht anders bauen kannst
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.05.2005, 19:44 Uhr
~e1sbaer
Gast


Habe mich mal in den FAQs umgesehen und mir mal den Beitrag über static angesehen. Wie ist das mit nun mit static functions und static variables in Klassen? Greift da jede Instanz der Klasse auf die gleiche Fuktion und die gleichen Variablen zu oder besitzt jede Instanz der Klasse auch eine eigene Instanz dieser Static-Variablen und Static-Funktionen?

An der Idee, dass in der Callback-Routine geprüft wird, welche Instanz betroffen ist, habe ich auch schon etwas herum überlegt. OpenGL liefert zwar ein Handle auf das Fenster welches betroffen ist, nur muss ich dann erstmal herausfinden, zu welcher Instanz meiner eigenen Window-Klasse dieses Fenster (Handle) gehört. ist halt auch recht aufwendig.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.05.2005, 10:16 Uhr
stephanw
localhorst


Static-Variablen gibts nur einmal an der Klasse, static-Funktionen können ohne Instanz aufgerufen werden. Deine Fehlermeldung oben sagt aus, dass ein Zeiger auf eine Member-Fkt. nicht dasselbe ist wie der Zeiger auf eine freie (bzw. static)-Funktion. Für den Aufruf einer Member-Fkt. braucht der Aufrufer nämlich eine Instanz von Window.
Natürlich kannst Du die Instanz auch als Argument mitgeben oder etwas in der Richtung basteln, wie schon angedeutet wurde.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: