【问题标题】:No instance of function template "max" matches the argument list argument types are (int, int)没有函数模板“max”的实例与参数列表参数类型匹配是 (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的定义@。这不是导致这个特殊问题的原因,但它最终会咬你。

标签: c++ templates arguments


【解决方案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左值引用。
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多