1、新建一个DLL工程,里面有两个类:ResManager 和 Singleton// Singleton.h
template <typename T> class Singleton
{
protected:
    static T* ms_Singleton;public:
    Singleton( void )
    {
        ……
    }    ~Singleton( void )
    {
        ……
    }    static T& GetSingleton( void )
    {
        ……
    }    static T* GetSingletonPtr( void )
    {
        ……
    }
}// ResManager.h
#include "Singleton.h"
class __declspec( dllexport ) ResManager: public Singleton<ResManager>
{
public:
    ResManager(void);
    ~ResManager(void);public:
    static ResManager& GetSingleton(void);
    static ResManager* GetSingletonPtr(void);    ……
    ……
}// ResManager.cpp
#include "ResManager.h"template<> ResManager* Singleton<ResManager>::ms_Singleton = 0;
ResManager* ResManager::GetSingletonPtr(void)
{
    return ms_Singleton;
}
ResManager& ResManager::GetSingleton(void)
{  
    assert( ms_Singleton );  
    return ( *ms_Singleton );  
}ResManager::ResManager(void)
{
    ……
}ResManager::~ResManager(void)
{
    ……
}……
……编译成功,没有问题。////////////////////////////////////////////////////////2、新建一个Win32程序的工程 MyTest// MyTest.h
#include "ResManager.h"
#pragma comment( lib, "ResManager.lib" )
……
……// MyTest.cpp
……
ResManager *pResMgr = new ResManager();
……编译失败,提示:
stdafx.obj : error LNK2001: 无法解析的外部符号 "protected: static class ResManager * Singleton<class ResManager>::ms_Singleton" (?ms_Singleton@?$Singleton@VResManager@1PAVResManager@2@A)
Debug/MyTest.exe : fatal error LNK1120: 1 个无法解析的外部命令问题一:请问这里编译失败是什么原因?
////////////////////////////////////////////////////3、如果把 Singleton 类声明改为:// Singleton.h
template <typename T> class __declspec( dllexport ) Singleton
{
    ……
    ……
}此时DLL编译成功,MyTest.exe也编译成功。//////////////////////////////////////////////////////4、如果为ResManager类添加一个std::string的变量// ResManager.h
#include "Singleton.h"
class __declspec( dllexport ) ResManager: public Singleton<ResManager>
{
public:
    ResManager(void);
    ~ResManager(void);public:
    static ResManager& GetSingleton(void);
    static ResManager* GetSingletonPtr(void);    ……
    ……private:
    std::string m_strName;
    ……
}此时 DLL 编译成功,MyTest.exe 编译失败,提示和前面的错误一样:stdafx.obj : error LNK2001: 无法解析的外部符号 "protected: static class ResManager * Singleton<class ResManager>::ms_Singleton" (?ms_Singleton@?$Singleton@VResManager@1PAVResManager@2@A)
Debug/MyTest.exe : fatal error LNK1120: 1 个无法解析的外部命令问题二:请问这里编译出错是什么原因?该如何解决?前者不添加这个std::string的变量就OK,添加了之后,后者就编译通不过。写得有点乱,不知道DX们能不能看懂。谢谢!