Ошибка функции шаблона, "нет подходящей функции для вызова ..." - PullRequest
1 голос
/ 24 января 2012

Видите, у меня есть этот код:

template<typename T=int>struct color
{
    T red, green, blue;
    color(T r, T g, T b)
    :red(r), green(g), blue(b)
    {
    }

    #ifdef SDL_BACKEND
    template<typename R,typename S> R map(S surf)
    {
        return SDL_MapRGB(surf->format,red,green,blue);
    }
    #endif /* SDL_BACKEND */
};

, и я использую его здесь:

pro::color<int> black(0,0,0);
SDL_FillRect(screen, 0, black.map(screen));

Теперь вот ошибка, которую я получаю:

ошибка: нет подходящей функции для вызова 'pro :: color :: map (SDL_Surface * &)' |

Я не настолько опытен в шаблонах, поэтому я не видел этогоошибка раньше.В чем именно проблема?

ПРИМЕЧАНИЕ. Я не пометил это тегом «SDL», потому что ИМХО этот вопрос больше связан с шаблонами, тот факт, что я использую SDL, не имеет значения.Также я использую gcc-4.4x с -std=c++0x.

1 Ответ

4 голосов
/ 24 января 2012

Это не имеет ничего общего с метапрограммированием. Это просто вопрос правильного использования шаблонов. Тип возврата не может быть выведен, поэтому вы должны указать его; либо в функции, либо в экземпляре шаблона. То есть, выберите один из этих двух:

// Version #1: Change function definition
template<typename S> Uint32 map(S surf) { return SDL_MapRGB(surf->format,red,green,blue); }


// Version #2: Change invocation
black.map<Uint32>(screen);

(На самом деле, я не совсем понимаю, зачем вам вообще нужен шаблон. Почему бы просто не превратить функцию в Uint32 map(SDL_Surface *)?)

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