老师是这样讲的:
template
<返回类型><函数名>(参数表)
{
函数体
}
template
T fuc(T x, int y)
{
T x;
//……
}
如果主调函数中有以下语句:
double d;
int a;
fuc(d,a);
则系统将用实参d的数据类型double去代替函数模板中的T生成函数:
double fuc(double x,int y)
{
double x;
//……
}
然后我是这么写的
template
T min(T x, T y)
{ return (x<y)?x:y; }
main()
{
cout<
}
编译不能通过,居然提示
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>test.cpp
1>.\test.cpp(77) : error C2668: 'min' : ambiguous call to overloaded function
1> .\test.cpp(18): could be 'T min(T,T)'
1> with
1> [
1> T=double
1> ]
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(3197): or 'const _Ty &std::min(const _Ty &,const _Ty &)'
1> with
1> [
1> _Ty=double
1> ]
我开始怎么看都找不到错在哪里,在我看来参数类型很明确了,然后我看了别人的例子,想了下,把模版定义的参数改成了引用
T min(T &x, T &y)
这样就行了,但是我并不明白为什么,这模版函数里也没有一定要改变形参值的语句,只是取数的话,不是直接(T x,T y)就行了么,老师也是这么讲的啊,为什么不行啊。用T min(const T &x,const T &y)也不行