std::map extern deklarieren?



  • Ich verstehe es nicht, ich habe folgendes:

    // abgesichert mit #ifndef
    enum MyType {A,B,C};
    std::map<std::string, MyType> myMap;
    

    So bekomme ich "multiple definitions".

    Mache ich

    // abgesichert mit #ifndef
    enum MyType {A,B,C};
    extern std::map<std::string, MyType> myMap;
    

    und deklariere myMap in der zugehörigen *.cpp, dann kommt "is ambigous".
    Mache ich nur das "extern" ohne Deklaration dann... ja dann wird gelinkt. Das kann doch gar nicht sein 🙄 ??

    make clean habe ich auch gemacht. Wie mache ich denn jetzt die map global korrekt verfügbar?



  • // MyType.h
    
    #ifndef MYTYPE_H_INCLUDED
    #define MYTYPE_H_INCLUDED
    
    enum MyType {A,B,C};
    extern std::map<std::string, MyType> myMap;
    
    #endif // MYTYPE_H_INCLUDED
    
    // MyType.cpp
    
    #include "MyType.h"
    
    std::map<std::string, MyType> myMap;
    

Anmelden zum Antworten