C++模板函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 08:27:18
C++中函数模版至少需要三个参数吗?为什么我这个简单的程序编译就说重载函数调用不明确?把第四行改为Type min(Type a,Type b,Type c)就可以通过编译.为什么?
#include<iostream>
using namespace std;
template<class Type>
Type min(Type a,Type b)
{
return a<b?a:b;
}
int main()
{
cout<<min(10,20);
cout<<min(10.5,20.6);
return 0;
}
另外,我的操作系统是Windows Vista Home Basic,编译用的Visual Studio 2005专业版.是不是兼容性的问题?(升级包都装过了)

昏,你仔细看下错误提示就知道了嘛,xutility中也有一个名叫min的函数的重载,这个头文件一定是被包含在了iostream类的相关文件中,所以编译器在编译时找到2个符合要求的重载,不知道用哪个,而出现ambiguous call。

解决方法就太简单了,把你的min改个名称就可以了,和标准库中的东东名称出现冲突是很多新手容易犯的毛病,我以前也被折腾过,如果你不想改自己的min的话也可以,把using namespace std;去掉,而用std::xxx的形式来调用每一个标准库函数或类方法,这也是名字空间带来的好处...

#include <iostream>
using namespace std;

template <class T>
T MyMin(T a, T b)
{
return a < b ? a : b;
}

int main()
{
cout << MyMin(1,2);
}

或者

#include <iostream>

template <class T>
T min(T a, T b)
{
return a < b ? a : b;
}

int main()
{
std::cout << min(1,2);
}

模版函数的参数个数没有任何限制,为0也无所谓,只要能将模版具现就可以;

调用不明确,你可能是类似这么写了
min( 10, 20.6 );
模版没法区分Type是int或者float;

好像 回答者:飘渺世间天 说得对,我也想起来了。。。

因为你还不真正了解模板和构造函数。
前一个问题不是必须三个参数,而是你的构造函数几个在这儿就是几个。至少得一个。