You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++调用STL内置max函数报no matching function错误如何解决

问题根因
  • std::max模板函数要求两个入参为相同类型,你代码中传入的两个参数类型不匹配:
    • 第一个参数ans是int类型(有符号整型)
    • 第二个参数st.size()返回值是size_t类型(无符号长整型,对应报错信息中的unsigned long)
      模板推导时出现类型冲突,因此找不到匹配的函数重载。
解决方案

下面是三种常用的可行方案,按需选择即可:

方案1:强制转换size()返回值为int(最便捷)

直接将st.size()的返回值通过static_cast转为和ans一致的int类型即可,修改对应行代码:

ans = max(ans, static_cast<int>(st.size()));

该方案适配原有代码逻辑,无需修改其他变量,且括号嵌套深度不可能超过int的取值范围,不存在溢出风险。

方案2:统一ans的类型为size_t

将ans的类型改为和st.size()返回值一致的size_t,最后返回时再转为int即可:

int maxDepth(string s) {
    stack<char>st;
    size_t ans = 0;
    for(char ch : s){
        if(ch == '('){
            st.push('(');
            ans = max(ans, st.size());
        } else if(ch == ')') {
            st.pop();
        }
    }
    return static_cast<int>(ans);
}

方案3:显式指定max的模板参数

显式指定std::max的模板参数为int,编译器会自动将第二个参数隐式转换为int类型:

ans = max<int>(ans, st.size());
注意事项

不建议使用C风格的强制转换(int)st.size(),static_cast是C++标准推荐的类型转换方式,类型检查更严格,安全性更高。

内容的提问来源于stack exchange,提问作者Koduri Mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:27:08