今天在做《Essential C++》里面的练习题的时遇到的这个问题。
先看代码,是一段很简单的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <typename T>
inline T max(T x, T y)
{
return x > y ?x:y;
}
template <typename T>
inline T max(vector<T> &x)
{
return *max_element(x.begin(), x.end());
}
int main()
{
cout<<max(1,2)<<endl;
return 0;
}vs上报告“有多个重载函数 max 与参数列表匹配”。这个错误觉得有点无辜……
然后定位了一下max函数,看了看重载的函数

原来如此……忘了系统也提供max函数了……所以平时做练习函数名称之类的也要注意啊……
解决办法:
(1)改自定义的函数名称
(2)不使用using namespace std;
(3)将调用改为:
cout<<::max(1,2)<<endl;//表示调用,本文件中的max函数
本文记录了一次在C++编程中遇到的max函数命名冲突问题。作者在编写一个简单的max函数时,因为与标准库中的max函数重名而引发编译错误。通过调整自定义函数名称、取消使用全局命名空间或指定作用域等方式成功解决了该问题。
5906

被折叠的 条评论
为什么被折叠?



