没有函数模板“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的max中发现
谢谢!
【问题讨论】:
删除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)的主要内容,如果未能解决你的问题,请参考以下文章
没有重载函数“AfxBeginThread”的实例与参数列表匹配
MFC CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数......”的问题