标题:请教一个函数模板方面的问题
只看楼主
任林
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-2-22
 问题点数:0 回复次数:2 
请教一个函数模板方面的问题

现有如下程序: template <class T> T fun(T a,T b) { return a+b; } #include<math.h> #include<iostream.h> void main() { cout<<fun(2.5,1); } 运行后,出现下列错误提示, :\Documents and Settings\renlin\work1.cpp(8) : error C2782: 'T __cdecl fun(T,T)' : template parameter 'T' is ambiguous could be 'int' or 'double' 执行 cl.exe 时出错.

work1.exe - 1 error(s), 0 warning(s) 请问,该如果改正程序。 我把数据强制类型转换后,程序如下所示: template <class T> double fun(T a,T b) { return double(a)+double(b); } #include<math.h> #include<iostream.h> void main() { cout<<fun(2.5,1); } 运行后,还是出现上面的错误提示。 请问错在哪里了,改怎么改?

搜索更多相关主题的帖子: 函数 模板 fun template 
2005-02-22 21:02
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

template &lt;class T1, class T2&gt;
T1 fun(T1 a, T2 b)
{   
    return (a + T1(b));
}

int main()
{
    std::cout&lt;&lt;fun(2.5,1);
    system("pause");
    return 0;
}

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-02-23 00:09
任林
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-2-22
得分:0 

首先感谢指点,看懂了上面的程序,但是当在要求fun(1,2.5)是就会出错,所以我做了如下改动 #include <iostream> #include <cstdlib> #include<iomanip.h>

template <class T1, class T2> double fun(T1 a, T2 b) { if(sizeof(a)==sizeof(int)) return (T2(a) + b);

return (a+T1(b)); }

int main() { std::cout<<fun(2.5,1)<<setw(10)<<fun(1,2.5); system("pause"); return 0; } 运行后结果正确. 但是假如要求fun(1,2)或者fun(1.2,2.4)的时候,这个程序就不能胜任了,在这种同种类型的相加时候,会出现如下错误提示: C:\Documents and Settings\renlin\work1.cpp(20) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class __SMANIP_int' (or there is no acceptable conversion) 那又请问要完成同种类型的加源程序该怎么改呢?

2005-02-23 11:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-12445-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.003322 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved