kein zugriff auf array



  • Hallo,

    ich habe in toos.h folgendes:

    // tools.h
    namespace programm{
    ...
    static wxArrayString cpt,msg;
    ..
    }
    //a.cpp:
    #include "tools.h"
    ...
    namespace programm{
    cpt[0] = "Caption 1";
    cpt[1] = "Caption 2";
    ...
    // identisch für msg;
    

    Innerhalb der a.cpp kann ich ohne probleme darauf zugreifen.
    Wenn ich jetzt in einer b.cpp darauf zugreifen möchte, funktioniert es nicht mehr.

    //b.cpp
    #include "tools.h"
    ...
    namespace programm{
    cpt[0]; // Fehler!
    

    Könnte es am wxArrayString liegen oder muss das so sein
    und ich habe etwas falsch verstanden??


  • Mod

    Was für ein Fehler?



  • Aus den Programmschnippseln und "Fehler" kann man wohl kaum schlau werden. Eine in einem Header definierte static-Variable ist aber sehr wahrscheinlich Müll.

    Lars



  • SeppJ schrieb:

    Was für ein Fehler?

    Scheint eine wxWidgets assertion zu sein. "nIndex<m_nCount"
    Wenn ich die Datei im Debug Modus anschaue so hat sie keinen einzigen Wert intus. (b.cpp) während in (a.cpp) noch alle Werte drin sind.



  • manni66 schrieb:

    Aus den Programmschnippseln und "Fehler" kann man wohl kaum schlau werden. Eine in einem Header definierte static-Variable ist aber sehr wahrscheinlich Müll.

    Lars

    Warum? Ich brauche zwei Variablen die überall im Programm gültig sind bis das Programm beendet wird.



  • waldfee schrieb:

    Warum? Ich brauche zwei Variablen die überall im Programm gültig sind bis das Programm beendet wird.

    Dann ist es Müll. Static auf namespace-Ebene (oder globaler Ebene) ist nicht das selbe wie static auf Klassenebene. Es bedeutet im Gegenteil dass die Variable nur in der jeweiligen Übersetzungseinheit existiert und das symbol anderen ÜEs nicht zugänglich ist. Im Klartext heißt also satic im header: für jede ÜE, die den header einbindet, existiert eine eigene Variable mit dem Namen. Die verschiedenen Varaiablen cpt in verschiedenen ÜEs haben nichts miteinander zu tun.

    Du suchst vermutlich irgendeine Art von Singleton.



  • pumuckl schrieb:

    Dann ist es Müll. Static auf namespace-Ebene (oder globaler Ebene) ist nicht das selbe wie static auf Klassenebene. Es bedeutet im Gegenteil dass die Variable nur in der jeweiligen Übersetzungseinheit existiert und das symbol anderen ÜEs nicht zugänglich ist. Im Klartext heißt also satic im header: für jede ÜE, die den header einbindet, existiert eine eigene Variable mit dem Namen. Die verschiedenen Varaiablen cpt in verschiedenen ÜEs haben nichts miteinander zu tun.

    Du suchst vermutlich irgendeine Art von Singleton.

    Super! Damit macht der leere ArrayString Sinn. Danke an alle für die Hilfe 🙂


Anmelden zum Antworten