今天在做《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函数