代码如下
#include<iostream>
#include<string>
using namespace std;
template<class T>
T max(T a,T b)
{
return (a>b)?(a):(b);
}
char*max(char*a,char*b)
{
int flag=strcmp(a,b);
if(flag>=0)
return a;
return b;
}
int main()
{
int a=2,b=4;
cout<<max(a,b);
char*c="adfae";
char*d="aefwef";
cout<<max(c,d);
}
错误是:e:\程序员\commanagement\commanagement\comoditymanagement.cpp(136) : error C2668: “max”: 对重载函数的调用不明确
1> e:\程序员\commanagement\commanagement\comoditymanagement.cpp(122): 可能是“T max<int>(T,T)”
1> with
1> [
1> T=int
1> ]
1> d:\program files\microsoft visual studio 9.0\vc\include\xutility(3356): 或 “const _Ty &std::max<int>(const _Ty &,const _Ty &)”
1> with
1> [
1> _Ty=int
1> ]
1> 试图匹配参数列表“(int, int)”时
但是将第一个模板传递的参数改为按引用传递就没问题。这是怎么回事?