没有函数模板“max”的实例匹配参数列表参数类型是(int,int)

时间:2017-08-21 08:02:27

标签: c++ templates arguments

我刚开始使用c ++而且我对模板没有太多了解,我制作了一个模板函数,我在Visual Studio中收到了这个错误:

//没有函数模板“max”的实例匹配参数列表参数类型是(int,int) // C2664'T max(T&,T&)':无法将参数1从'int'转换为'int&'

#include "stdafx.h"
#include <iostream>

using namespace std;


template <class T>
T max(T& t1, T& t2)
{
    return t1 < t2 ? t2 : t1;
}
int main()
{
cout << "The Max of 34 and 55 is " << max(34, 55) << endl;
}

在cout

max 中可以找到归档错误

谢谢!

2 个答案:

答案 0 :(得分:4)

const引用参数必须由实际变量支持(松散地说)。所以这会奏效:

template <class T>
T max(T& t1, T& t2)
{
    return t1 < t2 ? t2 : t1;
}
int main()
{
int i = 34, j = 55;
cout << "The Max of 34 and 55 is " << max(i, j) << endl;
}

但是,const引用参数没有此要求。这可能是你想要的:

template <class T>
T max(const T& t1, const T& t2)
{
    return t1 < t2 ? t2 : t1;
}
int main()
{
cout << "The Max of 34 and 55 is " << max(34, 55) << endl;
}

答案 1 :(得分:3)

你的函数期待两个l值引用,但你传递的是两个r值。

传递两个变量或更改函数签名以接受r值引用。