.| Autor | Beitrag |
|---|---|
|
000 27.05.2001, 22:25 Gandalf |
Hi Erstmal sorry das ich diese Frage in diesem Forum stelle, aber ich weiß ned wo ich sonst fragen könnte... eigentlich wollt ich ja auf www.gamedev.net fragen aber meine englisch Kenntnisse sind dann doch zu gering gewesen die Frage auf englisch zu formulieren.. :)
Folgendes ist mein Problem:
However.. ich steh da jetzt vor einem kleinen Problemchen...
Der Konstruktor der Klasse setzt den Zeiger anfangs auf die Adresse der integrierten Nachrichtenbehandlungsroutine, welche ich so deklariert habe:
und Über die Methode
kann man eine dein Zeiger auf eine eigene Nachrichtenbehandlungsroutine setzen. Jetzt habe ich aber das Problem das der Zeiger den ich definiert habe nur dann auf die Interne Routine Zeigen kann wenn diese als static deklariert ist.. dadurch kann die Routine jetzt scheinbar selbst nur mehr auf static deklarierte Variablen in der Klasse zugreifen.
Und jetzt hab ich echt keine Idee mehr warum der fehler kommt :(( Ich habe dann noch probiert den Zeiger auf die Interne Routine anders zu definieren, dass ich mir das static sparen kann:
Allerdings nimmt den Die WNDCLASS struktur nicht an :( Hmm... Wenn Jemand da eine Idee hat wie ich dieses merkwürdige Nichtaufgelöste externe Symbol wegkrige wäre das echt cool :)
Und sorry nochmal weil das im relativ OT ist.. --Gandalf
|
|
Profil || Suche |
|
001 28.05.2001, 00:19 Another1 |
das gleiche problem hatte valve im HalfLife code, da man im HalfLife code zeiger auf eine Think und Touch functionen etc. setzen kann. Da C++ das aber auf nichtstatische memberfunctionen verbietet, empfehl Ich dir mal das Standard SDK Code Only irgendwo runterzuladen und zu schauen wie valve das gemacht hat (war irgendwas die adress extra speichern, dann wieder konvertieren, naja schaus dir einfach an) die function zum zeiger setzen heißt SetThink und die setzt m_pfnThink = pfnNewThinkFunction o.ä ... // edit: ich habs mir selbst nochmal angeschaut, hier ist es für die Think function mal für dich aufbereitet: in class CBaseEntity der pointer auf die Thiunk function (m_pfnThink) ist so deklariert: void (CBaseEntity ::*m_pfnThink)(void); aufgerufem wird die function dann so: (this->*m_pfnThink)(); und letztendlich wird noch ein Macro benutzt um die function von der klasse aus zu setzen: #define SetThink( a ) m_pfnThink = static_cast <void (CBaseEntity::*)(void)> (a) wenn du jetzt also ne function hast
und willst sie sozusagen in CBaseEntity::Init() m_pfnThink zuweisen, dann musst du von CBaseEntity::Init() nur noch SetThink(BlaBla); aufrufen, das wars, keine compiler errors oder warnings =() --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
002 28.05.2001, 17:46 Gandalf |
Danke erstmal für deine Antwort, und dafür das du mir das aus dem HalfLife SDK rausgesucht hast. Das Problem ist nur das mein Problem dadurch nicht gelöst wird, sondern nur verschoben... Das mit dem MemberFunktionszeiger definieren hab ich eh schon probiert. Nur muss ich den Zeiger an die WNDCLASS Struktur übergeben, damit ich das Fenster anmelden kann...
Also prinzipiell wäre das genial, allerdings müsste ich jetzt den Zeiger
Hm. aber es muss eine Lösung geben... Es gibt für alles eine Lösung :)
Njo. Dennoch nochmal danke für die Antwort, und das du dir die Mühe gemacht hast mir das rauszusuchen und zu beschreiben. --Gandalf
|
|
Profil || Suche |
|
003 28.05.2001, 18:49 static_caster |
ein forum mit richtig dick so c++ befindet sich unter http://www.programmersheaven.com/wwwboard/board3/wwwboard.asp .
|
|
Profil || Suche |
|
004 28.05.2001, 19:16 Killing Me Softly |
Zwei Möglichkeiten:
Der Horizont vieler Menschen ist ein Kreis mit Radius Null - und das nennen sie ihren Standpunkt. |
|
Profil || Suche |
|
005 28.05.2001, 20:34 Another1 |
gehts nit einfach die reine adresse der function irgendwie in nem void* zu speichern (letztendlich is es ja auch nur ne adresse =) so wie
... eigentlich müsste das doch hinhauen .. oder? gib mal deine ICQ please, ich glaub da kommen wir weiter *G*
Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
006 28.05.2001, 20:51 Gandalf |
Also mal danke an alle die mir geantwortet haben: ) @static_caster:
@Killing Me Softly:
@Another1:
Gandalf
|
|
Profil || Suche |

