static arrays in C++



  • hallo,
    ich habe in einer headerdatei

    static int feld[2];

    deklariert

    in einer Methode der cpp datei setze ich

    Klassenname::feld[0]=wert;

    wobei wert ein Integer ist.

    Dabei kommt mir eine Fehlermeldung

    Nao.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static int * Klassenname::feld"

    woran liegt das?
    ich hab auch probiert vorher beide Werte in dem Konstruktor zu initialisieren und zu definieren. scheint aber nicht zu helfen.

    Danke im Voraus.



  • Da fehlt wohl die Definition:

    struct Klassenname{
      static int feld[2];
    };
    
    int Klassenname::feld[2]; // hier
    
    int main(){
      Klassenname::feld[0]=31415;
      Klassenname::feld[1]=42;
    }
    


  • alles in die cpp datei? und wenn ja wohin?
    ich hab es versucht am Anfang der cpp datei, aber gibt mir immer noch fehler aus.



  • und wenn meine cpp Datei keine main Methode hat, sondern das eine Klasse außerhalb der Struktur ist?



  • HansMeiser555 schrieb:

    alles in die cpp datei? und wenn ja wohin?
    ich hab es versucht am Anfang der cpp datei, aber gibt mir immer noch fehler aus.

    Ja. cpp Datei. Welchen Fehler bekommst Du?

    HansMeiser555 schrieb:

    und wenn meine cpp Datei keine main Methode hat, sondern das eine Klasse außerhalb der Struktur ist?

    Die main() ist nur zur Veranschaulichung.



  • Ich habe die Variable (darunter auch andere) oberhalb der Konstruktoren definiert als globale Variable.

    habe das static also in der cpp weggelassen und da es sich um einen Array handelt mit ={0,0}; initialisiert.

    Trotzdem kommt, wenn ich die Variable dann in der Methode daraufhin verwende die Fehlermeldung

    Nao.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static int *



  • Offensichtlich ist Dein Code umfangreicher, als nach Deinem ersten Posting zu vermuten.
    Mein Code ist ein minimales Beispiel, dass zeigt, wie man statische Datenmember definieren muss (ausserhalb der Klassendefinition), bevor man sie benutzt.

    Wenn Du mit diesem Beispiel das Problem nicht lösen kannst, kann ich Dir zum momentanen Zeitpunkt nicht helfen.

    Es ist wie Kaffeesatzlesen: Du postest keinen Code, woher soll ich denn wissen, das Du nicht einfach einen Tippfehler hast?


Anmelden zum Antworten