| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1845 人关注过本帖
标题:这个函数模板怎么不能用?
只看楼主 加入收藏
thanatus
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-8-16
收藏
 问题点数:0 回复次数:14 
这个函数模板怎么不能用?
这个是定义的一个函数模板,利用模板交换了两个整数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-09-20 22:58
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
template <class any> 是一个类模板的

使用函数模板是 template <typename any>
2008-09-20 23:03
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你和标准库里面的函数冲突了。。换个名字
#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-09-20 23:11
thanatus
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-8-16
收藏
得分:0 
我改过,没有用,不信你编译一下,确实可以用typename替换class,但我考虑了以后也许需要向后兼容,所以这里我用了class,再说整数类int,浮点类float本身也可以看作一个数据类,我用class也没有问题啊~
2008-09-20 23:12
thanatus
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-8-16
收藏
得分:0 
回复三楼,可以编译了~结果没有问题~多谢,我初学,但是我有很多问题不懂,以后向你多请教哈~
但是我以前也声明过swap函数(自己定义的,比如我利用指针交换两个数的时候),为什么那时候不报错啊?
这里的标准库是那个库?

[[it] 本帖最后由 thanatus 于 2008-9-20 23:16 编辑 [/it]]
2008-09-20 23:15
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
调用时,改成<int>swap1(a,b);试一下  我这没有那个VC环境
template<typename  r>也可以对多种类型的数据进行操作
2008-09-20 23:19
thanatus
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-8-16
收藏
得分:0 
[bo][un]守鹤[/un] 在 2008-9-20 23:19 的发言:[/bo]

调用时,改成swap1(a,b);试一下  我这没有那个VC环境
template也可以对多种类型的数据进行操作


改成swap1没有问题,我确实冲突了,改成int我刚才发帖之前试过,也没有用,
只有把swap改成swap1,但是我以前也给函数起过swap的名字呀~怎么这个时候不行了~唉~
2008-09-20 23:39
ma3587
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-6-17
收藏
得分:0 
[bo][un]thanatus[/un] 在 2008-9-20 23:39 的发言:[/bo]



改成swap1没有问题,我确实冲突了,改成int我刚才发帖之前试过,也没有用,
只有把swap改成swap1,但是我以前也给函数起过swap的名字呀~怎么这个时候不行了~唉~


可能你以前没有用 using namespace std;
2008-09-21 10:23
gaoce227
Rank: 4
来 自:山东
等 级:业余侠客
帖 子:134
专家分:218
注 册:2008-4-5
收藏
得分:0 
回复 1# thanatus 的帖子
请问,system()是什么意思?
2008-09-21 23:26
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
模板的尖括号中用class any是对的.这是老式用法,typename 在C++演进过程中中靠后,也是对的.还是我师兄说的对.是和名字空间std中的函数名冲突了.

学习切忌浮躁.
2008-10-03 10:18
快速回复:这个函数模板怎么不能用?
数据加载中...
 
   



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

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