[Error] call of overloaded ‘max(int&, int&)‘ is ambiguous
·
一、遇到问题
#include <iostream>
using namespace std;
#include <vector>
template <typename Type>
inline Type max( Type T1, Type T2)
{
return ( T1 > T2) ? T1 : T2 ;
}
int main()
{
int a = 100;
int b = 20;
cout << "int最大值为: " << max(a,b) << endl;
string aa = "aa";
string bb = "bb";
cout << "string最大值为: " << max(aa,bb) << endl;
return 0;
}
以上代码会报错: [Error] call of overloaded 'max(int&, int&)' is ambiguous
这个意思是:
在 main 函数中进行函数 max()重载时,出现(ambiguous)含糊不明确的问题; 即代码实现存在歧义。
二、问题原因
C++ 本来已经有了标准的 max() 函数了;
而自定义的 max() 函数与标准库的 std::max 函数冲突。
三、解决方法
1、调用时声明名字空间
自己写的函数名容易和标准库的函数名冲突,
C++ 采用命名空间 namespace 来解决这个问题。
用 "命名空间::函数名"
的方式准确调用所需函数,避免冲突:
::max(); //调用的自己写的 max() 函数
std::max(); //调用的标准模板库的 max() 函数
我们经常会使用 using namespace std;
, 其中的 std 就是 C++ 的标准命名空间。
2、改变函数名称
把自定义的函数名 max 改成 myMax 或其它即可。
更多推荐
已为社区贡献2条内容
所有评论(0)