免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1719 | 回复: 5
打印 上一主题 下一主题

[C++] 求助:模板函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-26 20:45 |只看该作者 |倒序浏览
下面的代码不管是在VC6.0还是在VC2010上都是不通过,为什么啊,知道的说下:
听君一席话,胜读十年书

#include<iostream>
using namespace std;
template <typename T>
void swap(T &a,T &b);
struct KT

{

char name[40];

double xinshui;

int floor;

};

template <>void swap<KT>(KT &kt1,KT &kt2);
void show(KT &kt);

int main()
{

system ("color d");

int i=10,j=20;

cout<<"没用模板之前:\n";

cout<<"i="<<i<<",j="<<j<<endl;

swap(i,j);

cout<<"使用模板之后:\n";

cout<<"i="<<i<<",j="<<j<<endl;

KT mzx={"mazxiao",4324,56,3};

KT yys={"yyansheng",4200,78,5};

cout<<"没用模板之前:\n";

show(mzx);

show(yys);

cout<<"使用模板之后:\n";

show(mzx);

show(yys);

return 0;

}
template <typename T>
void swap(T &a,T &b)
{

T t;

t=a;

a=b;

b=t;
}
template <>void swap<KT>(KT &kt1,KT &kt2)
{

double t1;

int t2;

t1=kt1.xinshui;

kt1.xinshui=kt2.xinshui;

kt2.xinshui=t1;

t2=kt1.floor;

kt1.floor=kt2.floor;

kt2.floor=t2;
}
void show(KT &kt)
{

cout<<"姓名:"<<kt.name<<endl;

cout<<"薪水:"<<kt.xinshui<<endl;

cout<<"工作层:"<<kt.floor<<endl;
}
/*
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Windows\System32\Cpp1.cpp(20) : error C2667: 'swap' : none of 2 overload have a best conversion
C:\Windows\System32\Cpp1.cpp(20) : error C2668: 'swap' : ambiguous call to overloaded function
C:\Windows\System32\Cpp1.cpp(23) : error C2078: too many initializers
C:\Windows\System32\Cpp1.cpp(24) : error C2078: too many initializers
执行 cl.exe 时出错.

Cpp1.exe - 1 error(s), 0 warning(s)
*/

论坛徽章:
0
2 [报告]
发表于 2012-12-26 21:33 |只看该作者
用了 using namespace std; 以后,你的 swap 就和标准库里的 std::swap 重复了

论坛徽章:
0
3 [报告]
发表于 2012-12-26 21:35 |只看该作者
回复 2# timothyqiu
谢谢,那这个怎么改啊

   

论坛徽章:
0
4 [报告]
发表于 2012-12-26 21:45 |只看该作者
回复 3# mzx1987mzx


给你的 swap 换个名字,或者去掉 using namespace std; 然后全部手动指定 std::

论坛徽章:
0
5 [报告]
发表于 2012-12-27 07:39 |只看该作者
回复 4# timothyqiu
嗯,就是这样,swap换成jhuan就能正常运行了!谢谢啊


   

论坛徽章:
0
6 [报告]
发表于 2012-12-27 07:45 |只看该作者
已解决......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP