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专业版.是不是兼容性的问题?(升级包都装过了)
#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;
好像 回答者:飘渺世间天 说得对,我也想起来了。。。
因为你还不真正了解模板和构造函数。
前一个问题不是必须三个参数,而是你的构造函数几个在这儿就是几个。至少得一个。