static Eigenschaft ausserhalb der Klasse bekannt machen
-
Hi,
ich hab folgendes: callback.h
class CCallback { private: static GLfloat XTranslation; static GLfloat YTranslation; public: CCallback (); ~CCallback (); static void keyboard (unsigned char key, int x, int y); static void skeyboard (int key, int x, int y); };und callback.cpp
#include "CCallback.h" GLfloat CCallback::XTranslation; GLfloat CCallback::YTranslation; CCallback::CCallback () { XTranslation = 0.0; YTranslation = 0.0; } void CCallback::keyboard (unsigned char key, int x, int y) { ... } void CCallback::skeyboard (int key, int x, int y) { ... }Wie mache ich jetzt ausserhalb der Klasse callback (z.b. in main.cpp) die eigenschaften XTranslation und YTranslation bekannt ?
Ich dachte, das geht immer so:
GLfloat Callback::XTranslation main::xtranslation;aber dann bekomme ich einen sytax error. Wie ging das nochmal ?
lg, cala.vera
- Danke für Hilfe im Voraus
-
Hallo,
Entweder entsprechende get-Methoden schreiben oder die static-Datenelemente in der public-Schnittstelle der Klasse deklarieren.
Also
class foo { public: static int bar; }; int foo::bar = 0; ... int main() { cout << "\n wert von foo::bar: " << foo::bar << endl; }Oder hab ich was falsch verstanden?
Caipi
-
Hi,
Danke, aber soweit hilft mir das nicht.
Hier nochmal genauere eine Übersicht (habe jetzt XTranslation public gemacht):CCallback.h
class CCallback { public: static GLfloat XTranslation; static GLfloat YTranslation; static void keyboard (unsigned char key, int x, int y); static void skeyboard (int key, int x, int y); };und CCallback.cpp
#include "CCallback.h" GLfloat CCallback::XTranslation; GLfloat CCallback::YTranslation; void CCallback::keyboard (unsigned char key, int x, int y) { ... } void CCallback::skeyboard (int key, int x, int y) { ... }hier meine main.h:
class main { public: void run (); static void display (); };und meine main.cpp:
GLfloat CCallback::XTranslation = 0.0; void main::display () { // Hier ist XTranslation unbekannt :( glTranslatef (XTranslation, YTranslation, 0); } void main::run() { // Hier wird immer nur die display() aufgerufen Mainwindow->startdisplay(); } int main () { main *app = new main(); app->run(); return 0; }Mein Problem ist, dass ich XTranslation ausserhalb der display deklarieren muss, und ich weiss nicht wieso, XTranslation nicht bekannt sein soll

Danke für Hilfe im Vorraus,
lg, cala.vera
-
cala.vera schrieb:
und ich weiss nicht wieso, XTranslation nicht bekannt sein soll

Weil es nicht XTranslation ist, sondern CCallback::XTranslation. Das musst du auch hinschreiben. Allerdings wird sich der Linker beschweren, weil du die Variable zweimal definiert hast, einmal in CCallback.cpp und einmal in main.cpp. Die zweite Definition muss weg.
-
Au Mann !
Danke. Das wars

Man dankt artig

Liebe Grüße an dieses kompetene Forum !
- cala.vera