怪异的“无法匹配功能定义”

时间:2012-02-09 17:27:52

标签: c++ visual-studio-2010 templates

我有

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时,我得到同样的错误......有人可以确认一下吗?

2 个答案:

答案 0 :(得分:1)

Visual Studio 2005中存在一个错误,可以防止某些“概述的”模板函数正确编译。

此处提供了一个修补程序。 http://support.microsoft.com/kb/930198

答案 1 :(得分:0)

这是一个错误。 我已将其提交给Microsoft

https://connect.microsoft.com/VisualStudio/feedback/details/724362/unable-to-match-function-definition

修复程序应该出现在Visual C ++的下一个版本中。