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

Posted

技术标签:

【中文标题】没有函数模板“max”的实例与参数列表参数类型匹配是 (int, int)【英文标题】:No instance of function template "max" matches the argument list argument types are (int, int) 【发布时间】:2017-08-21 08:02:26 【问题描述】:

我刚开始使用 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的ma​​x中发现

谢谢!

【问题讨论】:

删除using namespace std;并按值传递参数。 发布有关构建错误的问题时,请将实际错误完整、完整且未经修改地复制粘贴到问题正文中。它当然应该包括可能的信息说明。 当然,这段代码处于sin状态:using namespace std;表示你很可能在全局命名空间中有标准库对std::max的定义以及你自己对@987654325的定义@。这不是导致这个特殊问题的原因,但它最终会咬你。 【参考方案1】:

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;

【讨论】:

【参考方案2】:

您的函数需要两个左值引用,但您传递的是两个右值。

要么传递两个变量,要么更改函数签名以接受右值引用。

【讨论】:

const左值引用。

以上是关于没有函数模板“max”的实例与参数列表参数类型匹配是 (int, int)的主要内容,如果未能解决你的问题,请参考以下文章

CUDA模板错误:没有函数模板的实例与参数列表匹配

没有重载函数“AfxBeginThread”的实例与参数列表匹配

MFC CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数......”的问题

错误E0289:没有构造函数“ Movie :: Movie”的实例与基本程序(C ++)的参数列表匹配

在标头之间调用时,模板实例化无法匹配重载流运算符的参数列表

没有重载函数的实例匹配参数列表 C++