#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)’

可能是什么原因?

最佳答案

函数模板仅具有一个模板参数,并且您要向其传递3模板参数:

functionA <double, double, double> (1, 1) << "\n";

为什么使用3模板参数?

写吧:
functionA <double> (1, 1);

或者,您可以简单地让编译器推导template参数,如下所示:
functionA(1.0, 1.0);  //template argument deduced as double!
functionA(1, 1);     //template argument deduced as int!

10-08 07:51