模板函数错误,"no matching function for call to..."

Template Function error, "no matching function for call to..."

本文关键字:function for call to matching no 函数 错误      更新时间:2023-10-16

看,我有这个代码:

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"标记,因为IMHO这个问题更多地与模板有关,我使用SDL的事实无关紧要。此外,我正在将gcc-4.4x与-std=c++0x一起使用。

这与元编程无关。这只是正确使用模板的问题。返回类型无法推导,因此必须指定它;在函数或模板实例化中。也就是说,从这两个中选择一个:

// 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 *)呢?)

相关文章: