以下代码给出了无匹配的函数错误
#include<iostream>
using namespace std;
using namespace std;
template<class T, class U>
void fn (T t) {
cout<<t<<endl;
}
int main(int argc, const char * argv[]) {
fn<int>(1);
return 0;
}
C:\Users\tegra\Desktop\test.cpp||In function 'int main(int, const char**)':|
C:\Users\tegra\Desktop\test.cpp|9|error: no matching function for call to 'fn(int)'|
C:\Users\tegra\Desktop\test.cpp|9|note: candidate is:|
C:\Users\tegra\Desktop\test.cpp|4|note: template<class T, class U> void fn(T)|
C:\Users\tegra\Desktop\test.cpp|4|note: template argument deduction/substitution failed:|
C:\Users\tegra\Desktop\test.cpp|9|note: couldn't deduce template parameter 'U'|
但是,如果像这样交换模板参数,则错误消失
#include<iostream>
using namespace std;
using namespace std;
template<class U, class T>
void fn (T t) {
cout<<t<<endl;
}
int main(int argc, const char * argv[]) {
fn<int>(1);
return 0;
}
答案 0 :(得分:2)
T
可以从调用中的参数中推断出来。 U
不是。
当您编写fn<int>
时,您明确指定第一个参数为int
。如果U
是第一个参数,则没有问题,因为可以推导出T
。但是,如果T
是第一个,则编译器不知道U
应该是什么。