#include <iostream>
using namespace std;
template <typename x> x functionA (x, x);
int main ()
{
functionA <double, double, double> (1, 1) << "\n";
}
template <typename x> x functionA (x arg1, x arg2)
{
return arg1 + arg2;
}
此代码导致:
error: no matching function for call to ‘functionA(int, int)’
原因是什么?
答案 0 :(得分:2)
这里有两件事不对。首先,您只需要为模板指定一种类型:
functionA<double>(1, 1)
其次,您错过了该行开头的std::cout
。
答案 1 :(得分:1)
这是错误的:functionA <double, double, double> (1, 1)
。您尝试使用三个模板参数调用functionA()
,而functionA
的声明只有一个模板参数。
除此之外,电话会议后的<< "\n";
也没有任何意义。
答案 2 :(得分:1)
函数模板只有一个模板参数,你将3
模板参数传递给它:
functionA <double, double, double> (1, 1) << "\n";
为什么3
模板参数?
只需写下:
functionA <double> (1, 1);
或者您可以简单地让编译器推导出模板参数,如:
functionA(1.0, 1.0); //template argument deduced as double!
functionA(1, 1); //template argument deduced as int!
答案 3 :(得分:1)
该行应为,
std::cout << functionA <double> (1, 1) << "\n";
^^^^^^^missing ^^^^^^only 1 argument
因为functionA
只接受1个模板参数,所以你应该只用一个模板参数显式调用。
如果您的functionA
就像
template <typename x, typename y, typename z>
x functionA (y arg1, z arg2)
{
return arg1 + arg2;
}
答案 4 :(得分:0)
您无需多次指定类型。 如果返回类型和函数的参数相同,那么您甚至不需要指定类型。下面的代码编译得很好。
std::cout << functionA(1, 1) << std::endl;