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
相关产品推荐
相关产品推荐

