为了账号安全,请及时绑定邮箱和手机立即绑定

c++函数模板问题各位有什么建议?

c++函数模板问题各位有什么建议?

C++
www说 2019-12-02 04:04:16
essentialC++课后题2.5,重载函数max(),源码链接2.6是让使用template来重写2.5,我按照书上答案,运行出错,书上的源码链接看报错信息应该重载有歧义Infunction'intmain()':Line37:error:callofoverloaded'max(int,int)'isambiguouscompilationterminateddueto-Wfatal-errors.把max函数名改成max_new函数名运行成功改动后代码请问我如果不改函数名,如何能够运行正确呢?
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

可以使用命名空间把你自己实现的函数放入一个mynamespace的命名空间,然后后面的代码显示地制定命名空间mynamespace::max即可,代码如下:#include#include#include#includenamespacemynamespace{templateinlineTypemax(Typet1,Typet2){returnt1>t2?t1:t2;}}templateinlineelemTypemax(conststd::vector&vec){return*max_element(vec.begin(),vec.end());}templateinlinearrayTypemax(constarrayType*parray,intsize){return*std::max_element(parray,parray+size);}intmain(){intiarray[]={12,70,2,169,1,5,29};std::vectorivec(iarray,iarray+7);floatfarray[]={2.5,24.8,18.7,4.1,23.9};std::vectorfvec(farray,farray+5);std::stringsarray[]={"we","were","her","pride","of","ten"};std::vectorsvec(sarray,sarray+6);intimax=mynamespace::max(max(ivec),max(iarray,7));floatfmax=mynamespace::max(max(fvec),max(farray,5));std::stringsmax=mynamespace::max(max(svec),max(sarray,6));std::cout<<"imaxshouldbe169--found:"<<imax<<'\n'<<"fmaxshouldbe24.8--found:"<<fmax<<'\n'<<"smaxshouldbewere--found:"<<smax<<'\n';return0;}


查看完整回答
反对 回复 2019-12-03
  • 2 回答
  • 0 关注
  • 423 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信