一个overload的错误

songsong2008 2005-04-30 07:49:10
#include <iostream>
using namespace std;
template <class T>
void swap(T& var1,T& var2)
{
T temp;
temp=var1;
var1=var2;
var2=temp;
}
void main()
{
int i=1;
int j=2;
swap(i,j);
cout<<i<<endl<<j<<endl;
}
//这样的话会有两个编译错误,除非把开头两句改为
#include <iostream.h>
不要using namespace std;
该怎么解决?
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
songsong2008 2005-04-30
  • 打赏
  • 举报
回复
学到东西了,谢谢各位
useresu 2005-04-30
  • 打赏
  • 举报
回复
楼上什么意思?st1?不是std吗?
////////////////////////////
stl是标准模板库
stl的东西都放在一个叫std的名字空间中

这不是一个概念,
useresu 2005-04-30
  • 打赏
  • 举报
回复
楼上的1982pc()
说的对,
你无法再重载了,
因为stl中有了swap的函数模板了

当然把他重新放入个名字空间,不在std中,也是个办法


但是改个名字就可以了,不是更简单?
xzgyb 2005-04-30
  • 打赏
  • 举报
回复
在或者不用using namespace std
std::cout<<i<<std::endl<<j<<std::endl;
xzgyb 2005-04-30
  • 打赏
  • 举报
回复
或者用
using std::cout;
using std::endl;
取代
using namespace std;
1982pc 2005-04-30
  • 打赏
  • 举报
回复
不行,因为在std库里的swap已经是模板函数,你无法在你已你那样的形式重载了!
而overload是在有继承关系的类中子类修改其父类的虚拟函数的办法,这里你无法使用!
newegg2002 2005-04-30
  • 打赏
  • 举报
回复
解决冲突就行了..我用了这个方法:

#include <iostream>
#include <cstdlib>
using namespace std;
namespace my_space
{ template <class T>
void swap(T& var1,T& var2)
{
T temp;
temp=var1;
var1=var2;
var2=temp;
}
}
int main()
{
int i=1;
int j=2;
my_space::swap(i,j);
cout<<i<<endl<<j<<endl;
system("pause");
}
songsong2008 2005-04-30
  • 打赏
  • 举报
回复
楼上什么意思?st1?不是std吗?
flyingdancing2005 2005-04-30
  • 打赏
  • 举报
回复
是stl中有一个swap 的函数

songsong2008 2005-04-30
  • 打赏
  • 举报
回复
我的意思就是不把swap改名可以吗?
flyingdancing2005 2005-04-30
  • 打赏
  • 举报
回复
std 中一个swap 的函数
你把swap 改成 swap1
然后上面用
#include <iostream>
using namespace std;
就可以了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧