Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.12.2004, 21:25 Titel: Adresse einer gebundenen Methode |
|
|
Hi,
Ich machs kurz:
Code: |
Funktion(&klasse.methode);
|
geht net weil gegen den Standart is,
Code: |
Funktion(&class::methode);
|
geht auch net, weil das Argument dann class::*void is, und nicht nur void*.
Was geht dann?
Danke, ich hoff man versteht mich auch mit kurzschreibweise, habs grad eilig ^^. In aller eile, danke für die antowrtne, machts gut! |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 18.12.2004, 21:42 Titel: |
|
|
Gehts vielleicht so?
Code: | Funktion(&(klasse.methode)); |
Wenn du anstatt einer Referenz einen Zeiger übergeben willst, dann würde es auch einen Fehler geben, wenn dus so schreibst:
Code: | Funktion(*klasse.methode); |
Deshalb gehts so:
Code: | Funktion(*(klasse.methode)); |
oder kurz so:
Code: | Funktion(klasse->methode); |
_________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 19.12.2004, 10:01 Titel: |
|
|
funktion(&(klasse.methode)) geht auch nicht, weil (laut Compiller) Klammern nicht für Adressoperatoren benutzt werden dürfen/können. |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 19.12.2004, 10:48 Titel: |
|
|
Nein, leider auch nicht weil darin nur behandelt wird wie man Funktionsreferenzen übergibt. Das Problem bei meinem Beispiel ist aber das es eine Methode is, und irgendwie void* nicht zu class::*void kompatibel ist.
Vlt. bringt ja dei Fehlermeldung was:
error: cannot convert `void (OGL::*)()' to `void (*)()' |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 19.12.2004, 12:58 Titel: |
|
|
Nein, mein Problem ist das:
In deinem Beispiel wird der Parameter so definiert:
Methode(void (Klasse::*methode))
Ich habe aber einen Parameter (den ich nicht verändern kann) der so aussieht:
Methode(void *funktion)
-> Also auf Funktionen ausgelegt ist. Wie kann ich dieser Funktion aber statt einer Funktion eine Methode übergeben, also den Typ Klasse::*void in nur *void konvertieren?
Type/Cast geht nicht. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 19.12.2004, 13:06 Titel: |
|
|
Nahar hat Folgendes geschrieben: | funktion(&(klasse.methode)) geht auch nicht, weil (laut Compiller) Klammern nicht für Adressoperatoren benutzt werden dürfen/können. |
Ach stimmt...ich hab was überlesen(Ich dachte, du meinst normale Referenzen und nicht Funktionsreferenzen ).
Kannst du vielleicht mal den relevanten Code zeigen? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 19.12.2004, 13:22 Titel: |
|
|
Im Prinzip wollte ich eien Art openGL Klasse machen, halt alles Grunlegende in eine Klasse das es aufgeräumt is .
Und das Problem ist das ich dafür dieses "Funktionen registrieren" benutze (ist afaik vor allem für C gedacht, deswegen wahrscheinlich auch das Problem mit den Methoden).
glutDisplayFunc(&OGL::DrawGLScene);
Das sieht dann zum Beispiel so aus. Nur eben das es hier immer einen void-Pointer erwartet, und das leider keiner ist.
Ich hab auch schon probeir ob es per Typecast geht, aber (logischer weise) leider net.
im Endeffekt kann ich es auch anderst machen, aber mich würd halt interessieren ob es wirklich nicht geht, auch für die Zukunft. |
|
Nach oben |
|
|
|