假设我正在编写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.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;
}
在库中使用Enum时出现链接器错误。我理解这个问题,并且某处需要有一个LIB_EXPORT类型的声明,但我不太确定在哪里。