我有
class ObjectController
{
public:
...
template<template<class> class Action, class T>
Action<T> * createAction(typename Action<T>::CommandFunction cf, T * t)
{
return new Action<T>(cf, t);
}
...
};
一切正常...... 但我习惯只在我的类和其他文件中的定义中声明...(* .inl表示模板)...但是当我将这个代码移到类ObjectController之外时,就像这样:
class ObjectController
{
public:
...
template<template<class> class Action, class T>
Action<T> * createAction(typename Action<T>::CommandFunction cf, T * t);
...
};
template<template<class> class Action, class T>
Action<T> * ObjectController::createAction(typename Action<T>::CommandFunction cf, T * t)
{
return new Action<T>(cf, t);
}
我明白了:
unable to match function definition to an existing declaration definition
'Action<T> *gear::core::ObjectController::createAction(Action<T>::CommandFunction,T *)'
existing declarations
'Action<T> *gear::core::ObjectController::createAction(Action<T>::CommandFunction,T *)'
我该如何解决?
修改 当我从KennyTM获取确切的代码(见注释)并将其粘贴到我的VS2010时,我得到同样的错误......有人可以确认一下吗?
答案 0 :(得分:1)
Visual Studio 2005中存在一个错误,可以防止某些“概述的”模板函数正确编译。
此处提供了一个修补程序。 http://support.microsoft.com/kb/930198
答案 1 :(得分:0)
这是一个错误。 我已将其提交给Microsoft
修复程序应该出现在Visual C ++的下一个版本中。