Problem mit static deque in Klasse
-
Hallo,
ich möchte ein Klasse schreiben, die enums ersetzen soll, aber eben noch ein bisschen mehr können soll. Den Sourcecode habe ich unten reinkopiert. Leider streikt der gnu-compiler sobald ich mit push_back() in die statische deque den this-Zeiger hinzufügen will. Kann mir jemand sagen wo der Fehler liegt? Sitz da jetzt echt schon ewig dran.
Danke,
AndreasDie Header Datei:
#include <string> #include <deque> using namespace std; class verbose_action { public: string get_string() const { return m_action_name; } static const verbose_action TRACE_EXECUTION1; static const verbose_action TRACE_NUMBER1; static const verbose_action INTERRUPT1; private: verbose_action(string name) { m_action_name = name; actions.push_back(this); } static deque<verbose_action* > actions; string m_action_name; };Die Cpp-Datei:
#include "verbose_action.h" const verbose_action verbose_action::TRACE_EXECUTION1 = verbose_action("trace_execution"); const verbose_action verbose_action::TRACE_NUMBER1 = verbose_action("trace_number"); const verbose_action verbose_action::INTERRUPT1 = verbose_action("interrupt");Der Compilerfehler:
verbose_action.o(.gnu.linkonce.t._ZN14verbose_actionC1ESs+0x34): In function `verbose_action::verbose_action[in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': /usr/include/c++/3.3/bits/stl_deque.h:201: undefined reference to `verbose_action::actions' collect2: ld returned 1 exit status
-
Die statischen Instanzen von verbose_action hast du definiert, aber die deque selbst nicht.
Nachtrag: Wie ist das eigentlich mit der Instanzierungsreihenfolge bei statischen Membern? Kann man das durch die Deklarationsreihenfolge beeinflussen? Dann wäre es wohl besser, wenn die deque vor den Instanzen stehen würde.
-
Die Reihenfolge der Instanzierung ist bei statischen Variablen undefiniert. Mit anderen Worten sie fliegen einem um die Ohren, wenn sie von anderen statischen Variablen abhängig sind.....
-
Mathias schrieb:
Die Reihenfolge der Instanzierung ist bei statischen Variablen undefiniert. Mit anderen Worten sie fliegen einem um die Ohren, wenn sie von anderen statischen Variablen abhängig sind.....
Das ist so nicht ganz richtig. Die Reihenfolge ist nur über Übersetzungseinheiten hinweig undefiniert. Innerhalb einer Übersetzungseinheit gilt die Definitionsreihenfolge (also die Reihenfolge in der du die Definitionen in der cpp-Datei aufschreibst).