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

#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;
}

为什么报错呢?

qq_遁去的一_1
浏览 338回答 3
3回答

拉莫斯之舞

首先,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改个名字。

蝴蝶不菲

#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;}

神不在的星期二

#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;}
打开App,查看更多内容
随时随地看视频慕课网APP