undefined reference to GlobalÄIDs Klasse...



  • Hi,

    ich habe eine Klasse deklariert, die read-only Werte speichern soll.

    #ifndef GLOBALDEFS_H
    #define GLOBALDEFS_H
    
    #include <wx/object.h>
    
    class GlobalDefs : public wxObject
    {
        public:
            GlobalDefs();
            virtual ~GlobalDefs();
    
            const long SendMessageId;
            const long RetrieveMessageId;
    
        protected:
        private:
    };
    
    extern GlobalDefs GlobalIDs;
    
    #endif // GLOBALDEFS_H
    

    in der cpp werden sie dann definiert:

    #include "GlobalDefs.h"
    #include <wx/utils.h>
    
    GlobalDefs::GlobalDefs():
             SendMessageId( wxNewId() ),
             RetrieveMessageId( wxNewId() )
    
    {
        //ctor
    }
    
    GlobalDefs::~GlobalDefs()
    {
        //dtor
    }
    

    Im Frame (oder einer anderen Klasse mache ich dann :

    #include "GlobalDefs.h"
    ...
    wxCommandEvent evt( GlobalIDs.SendMessageId, wxID_ANY );
    

    Das kompilieren scheint auch zu funktionieren, aber das Linken nicht.

    Es kommt : undefined reference to `GlobalIDs`.

    Der Fehler besagt das es GlobalIDs nicht gibt, aber das Objekt existiert doch?



  • Mit "extern", wie der Name schon sagt, deklarierst Du lediglich, dass es "woanders" solch ein Objekt gibt. Du definierst es aber nirgendwo. Das solltest Du in der cpp nachholen.



  • Hi,

    ja, Algengrütze! Stimmt. Ich sollte es dann so machen in der cpp...

    ...
    GlobalDefs GlobalIDs;
    

    ...und es klappt.


Anmelden zum Antworten