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


Anmelden zum Antworten