Statische variable nicht initialisiert

Ich habe ein seltsames problem mit einer statischen variable, die offensichtlich nicht initialisiert ist, wie es sein sollte.

Ich habe ein riesiges Projekt, das läuft mit Windows und Linux. Da die Linux-Entwickler dieses problem nicht hat, würde ich vorschlagen, dass diese Art von WLAN-Visual-Studio-Zeug.

Header-Datei

class MyClass
{
    //some other stuff here
    ...
    private:
        static AnotherClass* const Default_;
};

CPP-Datei

AnotherClass* const MyClass::Default_(new AnotherClass(""));
MyClass(AnotherClass* const var)
{
    assert(Default_);
    ...
}

Problem ist, dass Default_ist immer NULL. Ich habe auch versucht, einen Haltepunkt bei der Initialisierung der Variablen, aber ich kann es nicht fassen.

Gibt es ein ähnliches problem in einer anderen Klasse.

CPP-Datei

std::string const MyClass::MyString_ ("someText");
MyClass::MyClass()
{
    assert(MyString_ != "");
    ...
}

In diesem Fall MyString_ist immer leer. Damit nicht wieder initialisiert.

Hat jemand eine Idee dazu? Dies ist ein Visual Studio-Einstellungen problem?

Cheers Simon

Edit:

Stieß ich auch auf die statische Initialisierung Fiasko. Aber ich bin mir nicht sicher, ob das könnte das problem sein, da gibt es keine Probleme mit dem Linux-compiler. Sollte das nicht der compiler in der gleichen Weise reagieren in diesem Fall?

  • Versuchen Sie, erstellen ein neues Projekt von Grund auf und sehen, wenn es passiert, gibt es auch
  • Sorry, kann das nicht tun. Als ich sagte, dass es ein wirklich riesiges Projekt.
  • Ich nehme an, das erste Beispiel war ein Tippfehler und sollte AnotherClass* const MyClass::Default_(new AnotherClass(""));
  • Man könnte noch versuchen, indem Sie ein neues, leeres test-Projekt mit einer statischen member und sehen, ob es richtig initialisiert wird, aber...
  • Ist dieser code in einer DLL?
  • Keine DLL - @Ashley: Ok, ich habe eine neue Projekt ähnlich wie das Amt des sbi und es funktioniert auch!?
  • Ist der code in einer statischen Bibliothek? Anschließend führen Sie in Probleme, wenn die Klasse MyClass (gerade die compilation unit) wird nicht verwiesen wird, indem Sie das hing Programm. Der linker wird dann nicht das erstellen von statischen Initialisierungs-code für die variable.
  • Es ist eine statische Bibliothek...

InformationsquelleAutor Simon Linder | 2010-04-27
Schreibe einen Kommentar