static deque<...*> Linker Problem



  • Hallo zusammen,

    ich habe für ein kleines Spielchen - welches ich gerade programmiere - ein Klasse geschrieben, welche folgendem Zweck dient:
    Es gibt diverse Nachrichten wie "Level up" oder "Speed up" an den User. Diese sollen eine gewisse Zeit auf dem Bildschirm bleiben und dann verschwinden.
    Ich habe das jetzt mal folgendermaßen versucht, bekomme aber den Linker Fehler

    TimeText.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: static class std::deque<class CTimeText *,class std::allocator<class CTimeText *> > CTimeText::texts" (?texts@CTimeText@@1V?deque@PAVCTimeText@@V?deque@PAVCTimeText@@V?allocator@PAVCTimeText@@@
    std@@@std@@A)

    Hat jemand ne Ahnung, was da falsch ist?
    Freue mich über jede Antwort!

    Ciao
    -DC

    #ifndef _TIMETEXT_H__
    #define _TIMETEXT_H__
    
    #include <deque>
    #include <string>
    #include "Text.h"
    #include "TimeObj.h"
    
    class CTimeText : public CTimeObj  
    {
    public:
    	CTimeText();
    	CTimeText( string tex, col_rgba col );
    	virtual ~CTimeText();
    
    	int Init(CText* ctext){ this->ctext = ctext; return TRUE; };
    	void AddText( string tex, col_rgba col ) { texts.push_back( new CTimeText(tex, col) ); texts.back()->Restart(1000); };
    	void PrintText( void );
    
    	void Exit( void );
    
    protected:
    	void Update( void );
    	string tex;
    	col_rgba col;
    	static deque<CTimeText*> texts;
    	CText* ctext;
    };
    
    #endif
    


  • in die cpp-datei muss nochmal die Definition:

    static deque<CTimeText*> CTimeText::texts;
    


  • du meinst

    deque<CTimeText*> CTimeText::texts;
    

    (ohne static)



  • Vielen Dank für die schnelle Hilfe an euch beide! 👍

    1. produziert folgenden Fehler bei der Kompilierung:
    error C2720: 'texts' : 'static ' Speicherklassenbezeichner fuer Elemente unzulaessig
    2. kompiliert und linkt ohne Fehler
    (die Klasse funktioniert zwar noch nicht, hab's aber gerade erst ausprobiert und bin jetzt zu müde um den Rest gerade zu biegen 😉 )

    Kann mir evtl. auch jemand sagen, warum man das machen muss (oder einen Link posten wo was darüber steht).

    Gute Nacht.
    -DC



  • static elementen in Klassen musst du extern einen speicherbereich zuweisen, sonst hat der compiler keine chance 🤡



  • ok, danke
    Und die Klasse macht auch mitlerweile (seit heute morgen) das, was sie soll! 🕶

    -DC


Anmelden zum Antworten