没有匹配的功能错误[模板]

时间:2010-11-18 02:57:26

标签: c++ templates

为什么下面的代码没有编译?

template <class T>
void foo_bar(T =5 , T = 10 , T = 15)
{
}

int main()
{
   foo_bar();
}

我收到此错误no matching function for call to 'foo_bar()'。如何解决错误?

2 个答案:

答案 0 :(得分:3)

函数中的默认参数类型无助于推导模板type-parameter。当您调用类似T的函数时,无法推断foo_bar(),因此您会收到错误。

所以试试这个foo_bar<int>();。在这种情况下,不会出现任何此类问题,因为T的类型已明确指定。

答案 1 :(得分:2)

编译器必须能够找出类型,但如果你从不给​​它任何,它不知道如何处理这些默认值。基本上,它无法匹配您对任何函数的调用,因为您没有给它一个类型来处理,并且函数定义没有帮助(出于上述原因)。因此,您需要在调用中添加括号类型,例如

int main()
{
foo_bar<int>();
return 0;
}

或任何你喜欢的类型。