gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:06:12 24 4
gpt4 key购买 nike

看,我有这段代码:

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));

现在这是我得到的错误:

error: no matching function for call to 'pro::color::map(SDL_Surface*&)'|

我对模板没有那么多经验,所以我以前没见过这个错误。到底是什么问题?

注意:我没有用“SDL”标签来标记这个问题,因为恕我直言,这个问题与模板更相关,我使用 SDL 的事实无关紧要。我还使用带有 -std=c++0x 的 gcc-4.4x。

最佳答案

这与元编程无关。这只是正确使用模板的问题。无法推导出返回类型,所以你必须指定它;在函数中或在模板实例化中。即,选择以下两者之一:

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

关于c++ - 模板函数错误, "no matching function for call to...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com