一、遇到问题

#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 或其它即可。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐