C++ 在DLL中使用模板时发生链接器错误
假设我正在编写一个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; }
// 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;
}