1、代码如下
//示例函数模板的使用
#include <iostream>
#include <string>
using namespace std;
template <typename T>//函数模板
T max(T a,T b)
{
return a>b?a:b;
}
int main()
{
int a,b;
cout<<"input two integers to a&b:"<<endl;
cin>>a>>b;
cout<<"max("<<a<<","<<b<<")="<<max(a,b)<<endl;
char c,d;
cout<<"input two chars to c&d"<<endl;
cin>>c>>d;
cout<<"max("<<"\'"<<c<<"\'"<<","<<"\'"<<d<<"\'"<<")=";
cout<<max(c,d)<<endl;
float x,y;
cout<<"input two floats to x&y:"<<endl;
cin>>x>>y;
cout<<"max("<<x<<","<<y<<")="<<max(x,y)<<endl;
string p,h;
cout<<"input two strings to p&h:"<<endl;
cin>>p>>h;
cout<<"max("<<"\'"<<p<<"\'"<<","<<"\'"<<h<<"\'"<<")=";
cout<<max(p,h)<<endl;
return 0;
}
2、报错如下
3、报错原因:
代码中使用了一个函数模板
max
,但是在 C++ 中已经有一个名为max
的标准库函数,用于比较两个值并返回较大的那个。因此,编译器无法确定到底是要调用自己定义的函数模板还是标准库的max
函数。
4、解决办法:
1、将函数模板
max
重命名为其他名称,以避免与标准库函数冲突2、在调用自己的函数模板时,使用作用域解析运算符
::
来明确指定你要调用的是你自己定义的函数模板,而不是标准库的max
函数。
方法一:
方法二:
5、这里我用方法一,修改后的代码如下:
//示例函数模板的使用
#include <iostream>
#include <string>
using namespace std;
template <typename T>//函数模板
T my_max(T a,T b)
{
return a>b?a:b;
}
int main()
{
int a,b;
cout<<"input two integers to a&b:"<<endl;
cin>>a>>b;
cout<<"max("<<a<<","<<b<<")="<<my_max(a,b)<<endl;
char c,d;
cout<<"input two chars to c&d"<<endl;
cin>>c>>d;
cout<<"max("<<"\'"<<c<<"\'"<<","<<"\'"<<d<<"\'"<<")=";
cout<<my_max(c,d)<<endl;
float x,y;
cout<<"input two floats to x&y:"<<endl;
cin>>x>>y;
cout<<"max("<<x<<","<<y<<")="<<my_max(x,y)<<endl;
string p,h;
cout<<"input two strings to p&h:"<<endl;
cin>>p>>h;
cout<<"max("<<"\'"<<p<<"\'"<<","<<"\'"<<h<<"\'"<<")=";
cout<<my_max(p,h)<<endl;
return 0;
}