目录
一、源代码及出现的问题
c++练习编写过程中
#include<iostream>
using namespace std;
template <class T>
T max(T a, T b)
{
return a > b ? a : b;
};
int main()
{
cout << max(1, 2) << endl;
cout << max(1.5, 3.55) << endl;
return 0;
}
出现以下3个问题:
①有多个重载函数"max"实例与参数列表匹配
②“max”:对重载函数的调用不明确
③"<<":对于class非法
二、原因及解决办法
报错的原因是在泛型函数max
的调用中存在二义性。
问题出在代码中使用了using namespace std;
,将std
命名空间中的所有符号引入到全局命名空间中。而在全局命名空间中,已经存在一个名为max
的函数模板,用于比较两个值的大小。这与你自己定义的max
函数发生了冲突。
解决这个问题的一种方法是避免使用
using namespace std;
,而是显式地指定std::max
来调用标准库中的max
函数模板。
#include<iostream>
//using namespace std;
template <class T>
T max(T a, T b)
{
return a > b ? a : b;
};
int main()
{
std::cout << max(1, 2) << std::endl;
std::cout << max(1.5, 3.55) << std::endl;
return 0;
}