2010-11-18 144 views
4

为什么下面的代码不能编译?没有匹配函数错误[模板]

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

int main() 
{ 
    foo_bar(); 
} 

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

回答

3

函数中默认参数的类型无法帮助推导出模板type-parameter。当您调用foo_bar()等功能时,无法在任何情况下推导出T,因此您会收到错误消息。所以试试这个foo_bar<int>();。在这种情况下,将不会有任何此类问题,因为明确指定了T的类型。

+1

这个工程。 thankz。 – FooBar 2010-11-18 03:11:55

2

编译器必须能够计算出类型,但是如果你永远不会给它,它就不知道如何处理这些默认值。基本上,它不能匹配你的调用任何函数,因为你没有给它一个类型的工作和功能定义没有帮助(由于上述原因)。所以你需要在括号中添加一个类型的电话,如

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

或任何类型罢工你的幻想。

相关问题