JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5a5d2838580947b1e2fc96745e6d420cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

static

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 07:54    Titel: static Antworten mit Zitat

Ich habe (wie in einem früheren Thread erwähnt) mein Fenster in eine Klasse eingebaut und dafür die Callback-Funktion static definiert. Wie kann ich aus dieser Callback-Funktion andere Methoden der Klasse, die nicht static sind aufrufen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 08:00    Titel: Antworten mit Zitat

Genauso wie jede andere Funktion. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 08:07    Titel: Antworten mit Zitat

nö:

Code:


// static definiert in class CEngine
LRESULT CALLBACK CEngine::MessageHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   switch(msg)
   {
     case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
      break;
     case WM_CHAR:
      CharMessage((char)wParam);
      return 0;
      break;
   }
   return DefWindowProc(hWnd, msg, wParam, lParam);
}

Compiling...
Engine.cpp
C:\MyProjects\3D Engine\Engine.cpp(79) : error C2352: 'CEngine::CharMessage' : illegal call of non-static member function
        c:\myprojects\3d engine\engine.h(45) : see declaration of 'CharMessage'
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 08:50    Titel: Antworten mit Zitat

Erm doch... wenn die Methode nicht statisch ist, musst du natürlich eine Instanz der Klasse anlegen!

Ich empfehle http://www.informit.de/books/c++21/data/inhalt.htm zu büffeln. ;) Das Buch ist gut.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 10:37    Titel: Antworten mit Zitat

ich geb einfach mal ein paar Infos zu dem Thema zum besten:

1. ohne static:

jedesmal, wenn du von einer Klasse eine Instanz erstellst, wird für die entsprechende Instanz ein Satz Variablen/Methoden entsprechend der Klassendefinition erstellt.

2. mit static:

die entsprechende Variable/Methode wird nur genau einmal erstellt, unabhängig von unterschiedlichen Instanzen.
Wenn du jetzt von einer "static"-Methode auf eine nichtstatische zugreifen willst, musst du folgendes beachten: Jede Instanz der Klasse besitzt diese nichtstatische Methode. Daher musst du der statischen Methode mitteilen, welche Instanz du meinst. Das kannst du z.B. machen, indem du eine statische Variable anlegst, der du vor dem Aufruf die entsprechende Instanz zuweist. Dann kannst du in der statischen Methode die nichtstatische Methode der entsprechenden Instanz aufrufen.

hoffe, das war jetzt nicht zu konfus...

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 10:42    Titel: Antworten mit Zitat

Zitat:

jedesmal, wenn du von einer Klasse eine Instanz erstellst, wird für die entsprechende Instanz ein Satz Variablen/Methoden entsprechend der Klassendefinition erstellt.


Das ist nicht ganz richtig. Die Methoden werden nicht mehrmals in den Speicher geschrieben.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 10:45    Titel: Antworten mit Zitat

Danke für die Antworten, ich mach es jetzt mit DirectInput Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 06.08.2003, 16:36    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
Zitat:

jedesmal, wenn du von einer Klasse eine Instanz erstellst, wird für die entsprechende Instanz ein Satz Variablen/Methoden entsprechend der Klassendefinition erstellt.


Das ist nicht ganz richtig. Die Methoden werden nicht mehrmals in den Speicher geschrieben.


ja, stimmt, hast recht. Das wird nur mit den Variablen gemacht, ich wollte auch nur ausdrücken, das jede Instanz "ihre eigene" Methode hat, auch wenn alle auf den gleichen physikalischen Speicher zugreifen Wink

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum