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


Anmelden zum Antworten