C ++ |只有引用变量在函数模板中有效

时间:2015-12-04 22:01:56

标签: c++ function templates

使用函数tempelate时,我只能将参考变量用作函数参数。

下面的程序(找到两个数字之间的最小值)工作正常。

asset-url

但是,当我更改以下功能时:

//Program to calculate minimum among two numbers
#include<iostream>
using namespace std;
template <class ttype>
//Using reference variables 
//as function parameters
ttype min(ttype& a, ttype& b)
{
    ttype res = a;
    if (b < a)
        res = b;
    return res;
}
int main()
{
    int a = 5, b = 10; 
    int mini = min(a, b); 
    cout << "Minimum is: " << mini << endl;
    return 0;
}

我收到编译错误。

我们在使用函数模板时是否应该只使用引用变量?

2 个答案:

答案 0 :(得分:2)

minstd::min冲突,因为您是using namespace std;

您可以执行以下操作来修复它,明确表示要使用所有命名空间之外的min

int mini = ::min(a, b);

或者,摆脱using并且它有效。

这两个解决方案都适用于gcc,&,没有它。

答案 1 :(得分:1)

这是因为min与std :: min冲突。要么为您的函数使用不同的名称,要么不使用“using namespace std”,或者将您的函数放在不同的命名空间中,或者使用它:

int mini = ::min(a, b);