C++模板使用中出现重载不明确

我在模板定义中按照书中的例子,敲进模板定义template<typenameT>Tmax(Tx,Ty),但编译时提示callofoverloaded'max(int&,i... 我在模板定义中按照书中的例子,敲进模板定义template <typename T> T max(T x,T y),但编译时提示call of overloaded 'max(int&, int&)' is ambiguous,cout<<"the MAX int:"<<max(n1,n2)<<endl;我看了一下书上是这样写的没错,后来我想了一下修改为template <typename T> T max(T &x,T &y),结果能正常得到结果,想问一下为什么template <typename T> T max(T x,T y)这样定义是错误的?还是因为我用的是QT+mingw造成的,? 展开
 我来答
百度网友e096309
2016-11-07 · TA获得超过1327个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:417万
展开全部
因为STL的namespace std里也有一个max(const int &x, const int &y),然后你定义的模板会被解释为max(int x, int y)。
然后 max(n1, n2)调用两个都是对的,编译器不知道该调用哪个好,所以就报错啦。
你可以用::max(n1, n2)调用你的函数,用std::max(n1, n2)调用stl的函数。
至于对于max(int &x, int &y)和max(const int &x, const int &y),因为n1和n2都是int类型,编译器优先选择可修改值的int &来调用,所以不会产生歧义。
追问
想问一下为什么用::max(n1,n2);可以,我试了一下的确可以,把std;去掉换成std::cout就可以正常输出了,看来的确是这个问题
帐号已注销
2016-11-07 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1243万
展开全部
换个名字。std::max是C++标准库定义的模板,你再定义一个重载解析会出现冲突! 这就是为什么不要使用using namespace std;的原因。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式