error C2908: 显式特化; ''已经被实例化
error C2908: explicit specialization; '' has already been instantiated
我有一个简单的模板单例class,我简化了if to keep is simple to read(删除了保护措施,断言等。这不是问题的主题)
template< class T> T* Create();
template <class T>
class CSingleton
{
public:
static T* CreateInstance() { return m_instance = Create<T>(); }
static void DestroyInstance() { delete m_instance;}
protected:
static T* m_instance;
};
如您所见,我使用全局函数 T* Create() 来更新指针,因为我的 class 可能是一个抽象 class。所以如果我改为这样定义 CreateInstance :
static T* CreateInstance() { return m_instance = new T; }
它会产生一个错误,我无法实例化一个抽象class。
所以这里有一个非常简单的例子,它会产生错误,
class :
class MyClass : public CSingleton<MyClass>
{
};
以及我的cpp中全局函数的定义
template< > MyClass* Create< MyClass >()
{
return nullptr;// just for the compilation demonstration
}
如果我不定义它,链接器将输出找不到 Create() 的错误,如果我定义函数,我会得到这个错误:
error C2908: explicit specialization; 'T *Create<T>(void)' has already been instantiated
error C2908: with
error C2908: [
error C2908: T=MyClass
error C2908: ]
我在这个问题上卡了 2 个小时,我找不到解决方案,我在 Whosebug 上搜索和搜索,找不到类似的问题和解决方案。
干杯,
塞布
所有这些 class 都在一个 DLL 库中,但我在仅构建库时遇到了编译器/link 错误。
我忘了检查 dllimport/dllexport 签名。在我的 Singleton class 和 Create func 前面添加这些解决了这个错误。
我有一个简单的模板单例class,我简化了if to keep is simple to read(删除了保护措施,断言等。这不是问题的主题)
template< class T> T* Create();
template <class T>
class CSingleton
{
public:
static T* CreateInstance() { return m_instance = Create<T>(); }
static void DestroyInstance() { delete m_instance;}
protected:
static T* m_instance;
};
如您所见,我使用全局函数 T* Create() 来更新指针,因为我的 class 可能是一个抽象 class。所以如果我改为这样定义 CreateInstance :
static T* CreateInstance() { return m_instance = new T; }
它会产生一个错误,我无法实例化一个抽象class。
所以这里有一个非常简单的例子,它会产生错误, class :
class MyClass : public CSingleton<MyClass>
{
};
以及我的cpp中全局函数的定义
template< > MyClass* Create< MyClass >()
{
return nullptr;// just for the compilation demonstration
}
如果我不定义它,链接器将输出找不到 Create() 的错误,如果我定义函数,我会得到这个错误:
error C2908: explicit specialization; 'T *Create<T>(void)' has already been instantiated
error C2908: with
error C2908: [
error C2908: T=MyClass
error C2908: ]
我在这个问题上卡了 2 个小时,我找不到解决方案,我在 Whosebug 上搜索和搜索,找不到类似的问题和解决方案。
干杯, 塞布
所有这些 class 都在一个 DLL 库中,但我在仅构建库时遇到了编译器/link 错误。
我忘了检查 dllimport/dllexport 签名。在我的 Singleton class 和 Create func 前面添加这些解决了这个错误。