为什么下面的代码没有编译?
template <class T>
void foo_bar(T =5 , T = 10 , T = 15)
{
}
int main()
{
foo_bar();
}
我收到此错误no matching function for call to 'foo_bar()'
。如何解决错误?
答案 0 :(得分:3)
函数中的默认参数类型无助于推导模板type-parameter
。当您调用类似T
的函数时,无法推断foo_bar()
,因此您会收到错误。
所以试试这个foo_bar<int>();
。在这种情况下,不会出现任何此类问题,因为T
的类型已明确指定。
答案 1 :(得分:2)
编译器必须能够找出类型,但如果你从不给它任何,它不知道如何处理这些默认值。基本上,它无法匹配您对任何函数的调用,因为您没有给它一个类型来处理,并且函数定义没有帮助(出于上述原因)。因此,您需要在调用中添加括号类型,例如
int main()
{
foo_bar<int>();
return 0;
}
或任何你喜欢的类型。