dll中dllexport出类的静态变量出错!求教高手指点迷津!
我在写一个dll的时候 内部有个单件模板类
template<typename T>
class __PetalExport Singletion
{
protected:
static T* msInstance;
public:
static T& getSingletion()
{
assert(msInstance);
return *msInstance;
};
static T* getSingletionPtr()
{
assert(msInstance);
return msInstance;
};
public:
Singletion()
{
assert(!msInstance);
msInstance = static_cast<T*>(this);
};
virtual ~Singletion()
{
assert(msInstance);
msInstance = 0;
};
};
这个地方不讨论 模板类是否导出 我不导出也是这问题-_-!!
下面我写一个管理类的时候 继承了这个单件类
LogManager.h
class __PetalExport LogManager:public Singletion<LogManager>
{
public:
LogManager(){};
~LogManager(){};
}
LogManager.cpp
template<> LogManager* Singletion<LogManager>::msInstance = 0;
在外部程序引用这个dll的时候 连接出错:
无法解析的外部符号 "protected: static class Petal::LogManager * Petal::Singletion<class Petal::LogManager>::msInstance" (?msInstance@?$Singletion@VLogManager@Petal@@@Petal@@1PAVLogManager@2@A)
请教高手这个原因何在!
[解决办法]
dll最好用纯c不要用C++类
[解决办法]
导出函数有错,用execope这个软件查一下就可以知道了,从你的警告"?msInstance@?$Singletion@VLogManager@Petal@@@Petal@@1PAVLogManager@2@A"中大概可以知道,在exe继承程序里面的成员函数不匹配,需要在每个成员函数前添加形如"@"/"@@"等前缀