statische Klassenvariable erzeugt Linker Fehler
-
Ich habe die Klasse
class PhaseObject { public: PhaseObject(); virtual ~PhaseObject(); private: static int m_count; public: static int count() { return m_count;} }; int PhaseObject::m_count = 0;welche in zwei Klassen geladen wird:
GlobalClasses.h
#include "PhaseObject.h" #include <vector> using std::vector; extern vector<PhaseObject> PhaseObjects;GlobalClasses.cpp
#include "GlobalClasses.h" vector<PhaseObject> PhaseObjects;MainWindow.h
#include "GlobalClasses.h" class MainWindow : ...das erzeugt nun den Fehler das
private: static int PhaseObject::m_count"sowohl in GlobalClasses.obj als auch in MainWindow.obj erzeugt wurde.
Was muss ich nun ändern?
-
Es ist private.
-
du kannst diese static variable zwar in der h file definieren aber das funktioniert nur wenn du diese h file _ein einziges mal_ inkludierst
(also selbst wenn du ifndef .. oder pragma once hast wirkt sich das nicht aus)
sobald du diese h file ein zweites mal irgendwo inkludierst schreit der linker weil er versucht die static variable nochmal zu erzeugen aber es sie schon gibt
die m_count definition muss also in die PhaseObject.cpp rein
ich weiss zwar nicht ob das der grund ist für deinen fehler aber du musst zumindest das auch umändern