Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在DLL中使用模板时发生链接器错误_C++_Templates_Visual C++_Dll_Linker - Fatal编程技术网

C++ 在DLL中使用模板时发生链接器错误

C++ 在DLL中使用模板时发生链接器错误,c++,templates,visual-c++,dll,linker,C++,Templates,Visual C++,Dll,Linker,假设我正在编写一个DLL库。此库包含一个模板和一个类 // Enum.h (Template part of library) template <typename Type> class Enum { private: Enum (void); // User implemented static std::map<const char*, Type> mMap; public: static int size() { return 0; }

假设我正在编写一个DLL库。此库包含一个模板和一个类

// Enum.h (Template part of library)
template <typename Type> class Enum
{
private:
    Enum (void); // User implemented
    static std::map<const char*, Type> mMap;

public:
    static int size() { return 0; }
};

//Misc.cc(Impl)
//**以下错误**
std::map Enum::mMap;
枚举::枚举()
{
mMap[“M1”]=M1;
mMap[“M2”]=M2;
mMap[“M3”]=M3;
mMap[“M4”]=M4;
}
//**上述错误**
杂项::杂项()
{
std::cout Related:“我遇到了一个链接器错误…”这篇文章(标题和结尾段)两次提到。我们是否应该假装我们被告知错误是什么?如果你的文章是关于解决一个不想要的错误的问题(有其他类型的错误吗?),请提供完整的逐字错误消息。
Enum::Enum()
无法编译。您似乎试图实现专门化,但语法错误。在任何情况下,您实际上都没有从DLL导出任何声称的
Enum
成员的专门化。
// Misc.h (Class part of library)
enum MiscEnum { M1, M2, M3, M4 };
struct LIB_EXPORT Misc { Misc(); };
// Misc.cc (Impl)

// **Errors Below**
std::map<const char*, MiscEnum> Enum<MiscEnum>::mMap;
Enum<MiscEnum>::Enum()
{
    mMap["M1"] = M1;
    mMap["M2"] = M2;
    mMap["M3"] = M3;
    mMap["M4"] = M4;
}
// **Errors Above**

Misc::Misc()
{
    std::cout << Enum<MiscEnum>::Size() << std::endl;
}
// Main.cc (App using library)
enum MainEnum { E1, E2, E3 };

std::map<const char*, MainEnum> Enum<MainEnum>::mMap;
Enum<MainEnum>::Enum()
{
    mMap["E1"] = E1;
    mMap["E2"] = E2;
    mMap["E3"] = E3;
}

void main()
{
    std::cout << Enum<MiscEnum>::Size() << std::endl;
    std::cout << Enum<MainEnum>::Size() << std::endl;
}