我是个C++新手,只是在使用max函数时遇到了这个意外错误,在这个函数中,我传递了long long和int类型的参数
当我将(int,int)作为参数或(long long,long long)传递时,它可以正常工作,但不适用于(long long,int)
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]);
}这是显示的错误
prog.cpp:39:25: error: no matching function for call to 'max(int&, long long int&)
s =max(s,board[i]);"发布于 2019-07-27 19:17:34
因为std::max是一个函数模板,其签名是,例如,
template< class T >
const T& max( const T& a, const T& b );完整列表请访问:https://en.cppreference.com/w/cpp/algorithm/max
现在,在实例化模板时,您提供了两种不同的类型,但模板只需要一种。您必须显式指定模板参数,如下例所示:
#include <algorithm>
int main(){
int a{5};
long long int b{55};
return std::max<long long int>(a, b);
} 正如注释中所指出的(用户John),您还可以转换这两种类型中的一种,例如,您可以将int转换为long long
发布于 2019-07-27 19:16:29
std::max的签名是:
template< class T >
constexpr const T& max( const T& a, const T& b );所以max希望这两个参数是同一类型的,如果它们不是同一类型的,那么你需要显式地设置模板参数:
std::max<long long int>(s, board[i])或者,您需要确保这两个参数属于同一类型。
发布于 2019-07-27 19:17:19
max()接受相同类型的参数。如果你想比较两个不同的变量,你必须将一个转换成另一个。在这种情况下,我建议将int转换为long long int,这样您就不会丢失任何东西。
https://stackoverflow.com/questions/57231493
复制相似问题