statische Klassenelemente



  • Original erstellt von <HeAvY_T>:
    int CStatic::Var = 20;

    ...und du bist dir sicher?

    -junix



  • Ja, ich bin mir sicher.
    Gehen wir die Sache mal von einer anderen Seite an. Ich erstelle im C++ Builder ein neues Projekt, eine ganz einfache Standard-Applikation. Dort füge ich den Code ein, damit das dann so aussieht:

    class CStatic
    {
            public:
            static int Var;
    };
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
            int CStatic::Var = 20;
    
    }
    

    Liegt vielleicht da schon mein Fehler oder müsste das so gehen? Naja, bei mir geht's jedenfalls nicht. Habt Ihr ein paar Tipps, was ich noch probieren könnte? Mir gehen allmählich jegliche Ideen aus 😉
    Thx



  • Was willst du denn jetzt da machen? Eine Variable deklarieren oder ihr einen Wert zuweisen?

    -junix



  • hmm... ich möchte einfach nur in diese statische Variable schreiben sowie daraus lesen können. Naja, mal sehen. Vielleicht finde ich eine andere Möglichkeit, meinen Wert zu speichern.



  • Überleg mal: wie schreibst/liest du eine Variable im Quelltext normalerweise?

    -junix



  • Also, ich mach mal eine ausführliche Beschreibung.

    Ich habe ein Programm geschrieben, das von einer Klasse mehrere Instanzen erstellt, um damit zu arbeiten. Jetzt möchte ich quasi eine Variable haben, die mir die Instanz zurückgibt, die gerade ausgewählt ist. D.h. es gibt eine MouseDown Methode innerhalb der Klasse (brauche ich, wegen dynamischer Erzeugung einiger Komponenten), in der die Variable auf die aktuell angeklickte Instanz gesetzt werden soll.
    Nun soll aber auch von der Form aus, über die ich die Instanzen der Klasse erstelle, die Möglichkeit bestehen, auf diese Variable zuzugreifen, um zu erfahren, welches Objekt gerade ausgewählt wurde.
    Dies wollte ich eben mit einer statischen Klassenvariable lösen, die den gleichen Typ annimmt, der durch die Klasse selbst definiert wird.

    Nun, denn... mit

    CStatic::Var = 20;
    oder CStatic.Var = 20;
    oder CStatic->Var = 20;
    oder wie auch immer, geht's nicht, weil ich den oben erwähnten Linker-Error bekomme.



  • Original erstellt von <HeAvY_T>:
    CStatic::Var = 20;

    Aha. Du hattes aber geschrieben:
    int CStatic::Var = 20;
    Das ist ein Unterschied!



  • Ja, aber es geht beides nicht.
    Schreibe ich das, wie im letzten Post angegeben, gibt es einen Linker-Error, der schon weiter oben in diesem Thread aufgetaucht ist.



  • Natürlich geht das nicht.

    CStatic stat;
    stat.Var = 20;
    


  • Ich habe das Problem jetzt auf andere Art und Weise ohne statische Variable gelöst.
    Trotzdem vielen Dank!


Anmelden zum Antworten