| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 458 人关注过本帖
标题:模板函数问题:至诚求助
只看楼主 加入收藏
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
 问题点数:0 回复次数:6 
模板函数问题:至诚求助

#include <iostream>
using namespace std;
template <class Any>
void swap(Any &a, Any &b)
{
Any temp;

temp=a;
a=b;
b=temp;
}
int main()
{

int i=10;
int j=20;
cout << "i, j=" << i << ", " << j << ".\n";
cout << "Using compiler-generated int swapper: \n";
swap(i,j);
cout << "Now i,j=" << i << ". " << j << ".\n";

double x=24.5;
double y=81.7;
cout << "x, y=" << x << ", " << y << ".\n";
cout << "Using compiler-generated int swapper: \n";
swap(x,y);
cout << "Now x,y=" << x << ". " << y << ".\n";

return 0;

}


定义的模板也没什么问题
可调用的时候就报错
万思不解
我刚刚学
真诚感谢大侠们帮小弟看看

[此贴子已经被作者于2007-9-14 9:22:11编辑过]

搜索更多相关主题的帖子: 函数 至诚 模板 
2007-09-14 09:21
远去的列车
Rank: 1
等 级:新手上路
威 望:2
帖 子:205
专家分:0
注 册:2007-8-7
收藏
得分:0 

namespace std 里有这个函数模板的定义,所以你重复定义了

改成 swap1

[此贴子已经被作者于2007-9-14 10:33:33编辑过]


C++学习
2007-09-14 10:03
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 

#include <iostream>
using namespace std;
template <class T1,class T2>
void swap(T1 *a,T2 *b)
{
T1 temp;

temp=*a;
*a=*b;
*b=temp;
}
int main()
{

int i=10;
int j=20;
cout << "i, j=" << i << ", " << j << ".\n";
cout << "Using compiler-generated int swapper: \n";
swap(&i,&j);
cout << "Now i,j=" << i << ". " << j << ".\n";

double x=24.5;
double y=81.7;
cout << "x, y=" << x << ", " << y << ".\n";
cout << "Using compiler-generated int swapper: \n";
swap(&x,&y);
cout << "Now x,y=" << x << ". " << y << ".\n";

return 0;

}


学习需要安静。。海盗要重新来过。。
2007-09-14 10:25
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
得分:0 
回复:(远去的列车)namespace std 里有这个函数模板...

原来是这样啊
是不是在MSDN里可以找到这个模板啊?


for(int i=0;i<无穷大;i++){我问牛鬼蛇神:我这样快乐好???答曰:你不快乐吗??}
2007-09-14 13:27
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
得分:0 
回复:(sunkaidong)#include using...
谢谢你,
你的结果是对的
可是模板函数变成了两个不同类型

for(int i=0;i<无穷大;i++){我问牛鬼蛇神:我这样快乐好???答曰:你不快乐吗??}
2007-09-14 13:28
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
得分:0 

我在百度上也找到了一个解释
大家给点意见


1,传递常数实参,不能使用普通的引用形参,要使用const的。
2,函数实现前缺少模板定义。
修改结果如下:
#include "iostream"

template <class Any>
void swap(const Any &a, const Any &b);

int main()
{
using namespace std;
int i=10;
int j=20;
cout << "i, j=" << i << ", " << j << ".\n";
cout << "Using compiler-generated int swapper: \n";
swap(i,j);
cout << "Now i,j=" << i << ". " << j << ".\n";

double x=24.5;
double y=81.7;
cout << "x, y=" << x << ", " << y << ".\n";
cout << "Using compiler-generated int swapper: \n";
swap(x,y);
cout << "Now x,y=" << x << ". " << y << ".\n";

return 0;
}

template <class Any>
void swap(const Any &a, const Any &b)
{
Any temp;

temp=a;
a=b;
b=temp;
}


for(int i=0;i<无穷大;i++){我问牛鬼蛇神:我这样快乐好???答曰:你不快乐吗??}
2007-09-14 13:30
远去的列车
Rank: 1
等 级:新手上路
威 望:2
帖 子:205
专家分:0
注 册:2007-8-7
收藏
得分:0 

呵呵,楼上的不对哦!

你在函数中改变了参数的值,所以不能声明成 const

而且,调用这个函数时,并没有直接用常量做参数的情况

你改后的函数仍调用了std::swap(int &a, int &b)

不然你按下面这样改改试试
int main()
{
using std::cout;
using std::endl; //没用到

int i=10;
int j=20;
……
}

最初的程序按上面这种方法改就OK

[此贴子已经被作者于2007-9-14 16:01:03编辑过]


C++学习
2007-09-14 15:36
快速回复:模板函数问题:至诚求助
数据加载中...
 
   



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

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