essential C++课后题2.5,重载函数max(),源码链接
2.6是让使用template来重写2.5,我按照书上答案,运行出错,书上的源码链接
看报错信息应该重载有歧义
In function 'int main()':
Line 37: error: call of overloaded 'max(int, int)' is ambiguous
compilation terminated due to -Wfatal-errors.
把max函数名改成max_new函数名运行成功改动后代码
请问我如果不改函数名,如何能够运行正确呢?
你声明的
max
与<algorithm>里的template <class T> const T& max( const T& a, const T& b );
构成了重载。编译器报模糊调用的错误是因为调用
max
时编译器认为这“两个重载一样好”。避免使用
using namespace std;
就能解决这个问题,这也是被广泛接受的最佳实践。另:
去掉
using namespace std;
后,编译器在39行处会报模糊调用的错误。这是因为通过argument-dependent lookup(这里最外层的max的实际参数是std::string
)找到了std::max
,构成重载。解决方案可以是用::max(...)
来调用全局域的max
。修改后代码