首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用long long int和int作为参数时,为什么max函数会出现错误

当我使用long long int和int作为参数时,为什么max函数会出现错误
EN

Stack Overflow用户
提问于 2019-07-27 19:06:54
回答 3查看 1.8K关注 0票数 3

我是个C++新手,只是在使用max函数时遇到了这个意外错误,在这个函数中,我传递了long long和int类型的参数

当我将(int,int)作为参数或(long long,long long)传递时,它可以正常工作,但不适用于(long long,int)

代码语言:javascript
复制
ll painter(int board[],int n,int k)
{

 ll  s = 0,total_min;
 ll ans;

 for(ll i = 0;i < n;i++)
   { total_min += board[i];
       s = max(s,board[i]);

}

这是显示的错误

代码语言:javascript
复制
prog.cpp:39:25: error: no matching function for call to 'max(int&, long long int&)
        s =max(s,board[i]);"
EN

回答 3

Stack Overflow用户

发布于 2019-07-27 19:17:34

因为std::max是一个函数模板,其签名是,例如,

代码语言:javascript
复制
template< class T > 
const T& max( const T& a, const T& b );

完整列表请访问:https://en.cppreference.com/w/cpp/algorithm/max

现在,在实例化模板时,您提供了两种不同的类型,但模板只需要一种。您必须显式指定模板参数,如下例所示:

代码语言:javascript
复制
#include <algorithm>

int main(){
    int a{5};
    long long int b{55};
    return std::max<long long int>(a, b);
}   

正如注释中所指出的(用户John),您还可以转换这两种类型中的一种,例如,您可以将int转换为long long

票数 2
EN

Stack Overflow用户

发布于 2019-07-27 19:16:29

std::max的签名是:

代码语言:javascript
复制
template< class T > 
constexpr const T& max( const T& a, const T& b );

所以max希望这两个参数是同一类型的,如果它们不是同一类型的,那么你需要显式地设置模板参数:

代码语言:javascript
复制
std::max<long long int>(s, board[i])

或者,您需要确保这两个参数属于同一类型。

票数 1
EN

Stack Overflow用户

发布于 2019-07-27 19:17:19

max()接受相同类型的参数。如果你想比较两个不同的变量,你必须将一个转换成另一个。在这种情况下,我建议将int转换为long long int,这样您就不会丢失任何东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57231493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档