Linker-Fehler 1120: Unresolved external reference



  • Hallo,

    ich bekomme seit neuem beim Kompilieren eines kleinen Projekts mit VC++ 2005 stets den Fehler, eine externe Referenz sei nicht aufgelöst. Der genaue Fehler ist:

    error LNK2001: unresolved external symbol "private: static class std::map<char,class std::vector<bool,class std::allocator<bool> >,
    struct std::less<char>,class std::allocator<struct std::pair<char const ,class std::vector<bool,class std::allocator<bool> > > > > HuffmanCode::code_table" (?code_table@HuffmanCode@@0V?map@DV?map@DV?vector@_NV?allocator@_N@std@@@std@@U?allocator@\_N@std@@@std@@U?less@D@2@V?allocator@U?allocator@U?pair@$$CBDV?
    vector@_NV?vector@\_NV?allocator@_N@std@@@std@@@std@@@2@@std@@A)

    Beim bemängelten Symbol 'code_table' handelt es sich um folgende Definition:

    class HuffmanCode {
    public:
        typedef std::string StringType;
    private:
        typedef StringType::value_type CharType;
        typedef std::vector<bool> BitCode;
        typedef std::map<CharType, BitCode> TransTable;
    
        static TransTable code_table;
    };
    

    (Auszug)

    Verwendet wird diese private Variable in einer anderen Datei, welche die Implementierung der Klassendefinition darstellt. Vor Einführen eben dieser Variable funktionierte alles bestens.

    Ich bin nicht sicher, ob es sich um ein compilerspezifisches Problem handelt, sehe jetzt aber keinen Fehler im Code. In einem anderen Compiler (MinGW) erzeugte dieser Code schon einige Zeit davor plötzlich einen Linkerfehler, allerdings aus vollkommen anderem Grund.

    Kann da jemand helfen? Wieso kann dieses Symbol nicht aufgelöst werden?



  • Hast du die static Variable auch ausserhalb der Klasse initialisiert ?

    Ansonsten ergänze die Cpp um:

    TransTable HuffmannCode::code_table;
    


  • naja unresolved external symbol sind im normalfall entweder fehlende Header (hatte Estartu erst neulich hier im Forum) oder was wohl das häufigere ist, dass Funktionen die du deklarierst nicht in deiner Header stehen.

    Schau mal nach ob alles im Header ist was du in der Cpp schreibst.



  • phlox81 schrieb:

    Hast du die static Variable auch ausserhalb der Klasse initialisiert ?

    Ansonsten ergänze die Cpp um:

    TransTable HuffmannCode::code_table;
    

    ... Nein. Habe ich natürlich vergessen. Danke, das war's.


Anmelden zum Antworten