为了账号安全,请及时绑定邮箱和手机立即绑定

以下内容是关于C语言函数模板问题,为什么报错呢?

以下内容是关于C语言函数模板问题,为什么报错呢?

C PHP
qq_遁去的一_1 2021-12-02 20:07:59
#include "stdafx.h"#include <iostream>template <class T>void swap(T &a,T &b);int main(){using namespace std;int i=20;int j=30;cout<<"i,j="<<i<<j<<endl;swap(i,j);cout<<i<<","<<j<<endl;getchar();return 0;}void swap(T &a,T &b){int temp;temp=a;a=b;b=temp;}为什么报错呢?
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

首先,C没有函数模版。C++才有。
其次,template <class T>是函数声明的一部分,所以下面函数实现应该是:
template <class T>
void swap(T &a,T &b){
int temp;
temp=a;
a=b;
b=temp;
}

最后,#include <iostream>,在标准的C++函数中,std的域中已经有一个swap函数。
而且前面也using namespace了。函数声明重复。
两个办法:
1 swap(i,j);改为 ::swap(i,j); //全局化。
2 swap改个名字。

查看完整回答
反对 回复 2021-12-07
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

#include "stdafx.h"
#include <iostream>
template <class T>
void myswap(T &a,T &b); //因为标准模板库中有swap函数,系统不能识别,我只要函数名改一下就可以了
int main(){
using namespace std;
int i=20;
int j=30;
cout<<"i,j="<<i<<j<<endl;
swap(i,j);
cout<<i<<","<<j<<endl;
getchar();
return 0;
}
template <class T> //这里也需要
void myswap(T &a,T &b){
T temp;
temp=a;
a=b;
b=temp;
}



查看完整回答
反对 回复 2021-12-07
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

#include <iostream>
using namespace std; //引入std命名空间
template <class T>
void myswap(T &a,T &b); //swap在iostream定义过了,换个名字
int main(){
using namespace std;
int i=20;
int j=30;
cout<<"i,j="<<i<<j<<endl;
myswap(i,j);
cout<<i<<","<<j<<endl;
getchar();
return 0;
}
template<class T> //这个还是要写一遍
void myswap(T &a,T &b){
T temp; //temp是T类型
temp=a;
a=b;
b=temp;
}



查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 337 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信