странный "не может соответствовать определению функции" - PullRequest
0 голосов
/ 09 февраля 2012

у меня

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 ]

1 голос
/ 09 февраля 2012

В Visual Studio 2005 имеется ошибка, которая препятствует правильной компиляции некоторых «описанных» функций шаблона.

Здесь доступно исправление.http://support.microsoft.com/kb/930198

0 голосов
/ 15 февраля 2012

Это ошибка.Я отправил его в Microsoft

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

Исправление должно появиться в следующей версии Visual C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...