C++11中的模板函数返回值如何确定

LY_lxq123 2016-12-06 11:51:09

//声明
template <typename T1,typename T2>
auto Average(T1 a,T2 b) -> decltype(a+b);
int main()
{
int ave=Average(1,1.2);
cout<<ave;
return 0;
}
//定义
template <typename T1,typename T2>
auto Average(T a,T b) -> decltype(a+b)
{
return a+b;
}


代码中变量ave的类型如何确定呢?
我试了这样写,提示错误:
错误 1 error LNK2019: 无法解析的外部符号 "double __cdecl Average<int,double>(int,double)" (??$Average@HN@@YANHN@Z),该符号在函数 _main 中被引用
错误 2 error LNK1120: 1 个无法解析的外部命令
错误 3 IntelliSense: 没有与参数列表匹配的 重载函数 "Average" 实例
...全文
380 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-12-07
  • 打赏
  • 举报
回复
template <typename T1,typename T2> auto Average(T a,T b) -> decltype(a+b) 改成 template <typename T1,typename T2> auto Average(T1 a,T2 b) -> decltype(a+b)
sdghchj 2016-12-07
  • 打赏
  • 举报
回复
template <typename T1,typename T2> auto Average(T a,T b) -> decltype(a+b) { return a+b; }
ri_aje 2016-12-07
  • 打赏
  • 举报
回复
返回值就是 a+b 表达式的类型,具体而言就是 a 和 b 根据整形提升和各种必要转换后的类型。比如对于 int 和 double,int+double 的类型就是 double。主楼的编译错误是你写错了模版参数名造成的,写模版代码的话,把定义和声明放在一起是最好的方法,分开了麻烦多多。

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧