у меня
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, я получаю ту же ошибку ... Может кто-нибудь подтвердить это?