| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 559 人关注过本帖
标题:这个函数模板怎么不能用?
收藏  订阅  推荐  打印 
thanatus
Rank: 1
等级:新手上路
帖子:27
积分:388
注册:2006-8-16
这个函数模板怎么不能用?

这个是定义的一个函数模板,利用模板交换了两个整数a和b,但是编译不能通过,用的是dev-c++编译器,
编译提示:call of overloaded `swap(int&, int&)' is ambiguous ,请问这是为什么啊?

#include <iostream>

template <class any>

void swap(any &, any &);

int main()
{
    using namespace std;
   
    int a=3, b=4;
   
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
   
    swap (a,b);
   
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
   
    system("pause");
   
    return 0;
}

template <class any>
void swap (any &x, any &y)
{
     any temp;
     temp = x;
     x = y;
     y = temp;
     
}
搜索更多相关主题的帖子: 函数  模板  
2008-9-20 22:58
守鹤
Rank: 12Rank: 12Rank: 12
来自:山東臨沂
等级:版主
威望:11
帖子:312
积分:3474
注册:2008-6-20

template <class any> 是一个类模板的

使用函数模板是 template <typename any>
2008-9-20 23:03
sunkaidong
Rank: 12Rank: 12Rank: 12
来自:南京师范大学
等级:版主
威望:4
帖子:4131
积分:44881
注册:2006-12-28
你和标准库里面的函数冲突了。。换个名字

#include <iostream>

template <class any>

void swap1(any &, any &);

int main(void)
{
    using namespace std;
   
    int a=3, b=4;
   
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
   
    swap1(a,b);
   
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
   
    system("pause");
   
    return 0;
}

template <class any>
void swap1 (any &x, any &y)
{
     any temp;
     temp = x;
     x = y;
     y = temp;
     
}

学习需要安静。。海盗要重新来过。。
2008-9-20 23:11
thanatus
Rank: 1
等级:新手上路
帖子:27
积分:388
注册:2006-8-16

我改过,没有用,不信你编译一下,确实可以用typename替换class,但我考虑了以后也许需要向后兼容,所以这里我用了class,再说整数类int,浮点类float本身也可以看作一个数据类,我用class也没有问题啊~
2008-9-20 23:12
thanatus
Rank: 1
等级:新手上路
帖子:27
积分:388
注册:2006-8-16

回复三楼,可以编译了~结果没有问题~多谢,我初学,但是我有很多问题不懂,以后向你多请教哈~
但是我以前也声明过swap函数(自己定义的,比如我利用指针交换两个数的时候),为什么那时候不报错啊?
这里的标准库是那个库?

[ 本帖最后由 thanatus 于 2008-9-20 23:16 编辑 ]
2008-9-20 23:15
守鹤
Rank: 12Rank: 12Rank: 12
来自:山東臨沂
等级:版主
威望:11
帖子:312
积分:3474
注册:2008-6-20

调用时,改成<int>swap1(a,b);试一下  我这没有那个VC环境
template<typename  r>也可以对多种类型的数据进行操作
2008-9-20 23:19
thanatus
Rank: 1
等级:新手上路
帖子:27
积分:388
注册:2006-8-16

守鹤 在 2008-9-20 23:19 的发言:

调用时,改成swap1(a,b);试一下  我这没有那个VC环境
template也可以对多种类型的数据进行操作
改成swap1没有问题,我确实冲突了,改成int我刚才发帖之前试过,也没有用,
只有把swap改成swap1,但是我以前也给函数起过swap的名字呀~怎么这个时候不行了~唉~
2008-9-20 23:39
ma3587
Rank: 1
等级:新手上路
帖子:26
积分:374
注册:2008-6-17

thanatus 在 2008-9-20 23:39 的发言:



改成swap1没有问题,我确实冲突了,改成int我刚才发帖之前试过,也没有用,
只有把swap改成swap1,但是我以前也给函数起过swap的名字呀~怎么这个时候不行了~唉~
可能你以前没有用 using namespace std;
2008-9-21 10:23
gaoce227
Rank: 1
等级:新手上路
帖子:35
积分:470
注册:2008-4-5
回复 1# thanatus 的帖子

请问,system()是什么意思?
2008-9-21 23:26
zzt_428
Rank: 2
来自:南京师范大学
等级:注册会员
威望:1
帖子:156
积分:1740
注册:2008-7-6

模板的尖括号中用class any是对的.这是老式用法,typename 在C++演进过程中中靠后,也是对的.还是我师兄说的对.是和名字空间std中的函数名冲突了.

学习切忌浮躁.
2008-10-3 10:18
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.054430 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved