>>运算符重载由于使用std名字空间所引起的问题

daikeshi 2004-04-27 01:59:53
见程序如下:
#include <iostream>
using namespace std;

class HighWay
{
public:
short color;
short to;
short from;
friend istream& operator >> (istream&, HighWay&);
};

istream& operator >> (istream& io,HighWay& hw)
{
io >> hw.from;
io >> hw.to;
io >> hw.color;
return io;
}

int main()
{
int N,C,H;
cin >> N >> C >> H;
HighWay hw;
cin >> hw;
}
这样做在vc6会产生一个error C2593: 'operator >>' is ambiguous错误。
若去除using namespace std; 改为#include <iostream.h>就好了
难道c++中是先考虑名字空间再考虑运算符重载的吗?请高手指点
...全文
32 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyy219 2004-04-30
  • 打赏
  • 举报
回复
不会吧,vc6不能成功编译,错误正如楼主说的!按angelo23(angelo)说的,再把main改为返回void的就正确了!这应该是前向声明的问题吧,因为在HighWay类定义内的函数又用到了HighWay的引用!
codelover 2004-04-29
  • 打赏
  • 举报
回复
我用的vc6,没问题,成功编译。
代码之诗 2004-04-29
  • 打赏
  • 举报
回复
GCC 是 : Gnu Compiler Collection ,即 GNU 编译器集,g++ 是其中的 C++ 编译器,是GCC 的一部分。不过,由于 C++ 编译器的主流地位,通常说 GCC 的时候往往是指 g++。
值得一提的是,GCC 也是一个集成编译工具,它会根据指定的文件后缀名自动选择合适的编译器来编译——不过有时用 GCC 它不会自动加入标准头文件和标准库目录,所以还是 g++ 用得多。
cyy219 2004-04-27
  • 打赏
  • 举报
回复
g++和GCC具体是什么?
cxc014 2004-04-27
  • 打赏
  • 举报
回复
是啊, vcchunhong(願意偽祢) 说得很对,因为我也是其中一员(:
先顶着!
过阵来看,希望有好消息~~~~~~~~~
cxc014 2004-04-27
  • 打赏
  • 举报
回复
学习!
代码之诗 2004-04-27
  • 打赏
  • 举报
回复
一两句话说不清楚,楼主遇到的麻烦是因为 VC6 不支持 Koenig 查找,用 VC7 或 BCC 5.5 就没有问题了。当然,GCC 也可以。

关于 Koenig 查找,解释起来比较麻烦,不过,在绝大部分情况下,它与一般人的直觉是一致的,不知道也无所谓。

最后说明一下:对于头文件来说,使用 using namespace 语句是一种非常不好的习惯,命名空间本来是为了解决名字冲突而设计的,可是在头文件中这么一用,其意义就荡然无存了。如果要用,就在函数体中用(可惜不能在类声明中用 ;( ),不要让它无拘无束的起全局作用。
vcchunhong 2004-04-27
  • 打赏
  • 举报
回复
其实到现在还很多人没有真正明白
using namespace std;的真正意义
哪为高手能在此详细的讲讲它
或者发一个有关介绍它的网址也可以
或许对大家有所帮助
对楼主也一样`
vcchunhong 2004-04-27
  • 打赏
  • 举报
回复
改了以后的确可以用~
angelo23 2004-04-27
  • 打赏
  • 举报
回复
试一下在HighWay定义之前加上两句
class HighWay;
istream& operator >> (istream&, HighWay&);
不过手头没有vc6,不知道行不行
zheng_can 2004-04-27
  • 打赏
  • 举报
回复
还有在用 vc6 写"标准" C++ 的同志们呐
…………

to newegg2002(天生我菜有X用):
using namespace 了吗?

btw: 这个 csdn 可是够慢的
newegg2002 2004-04-27
  • 打赏
  • 举报
回复
是不是新的标准名空间中有什么改动啊..
前一段时间用新的包含方式 ,,作过一个模板,,不行..后来改为
#include "iostream.h"
又都好了.
楼下高手也顺道解释一下?
pacman2000 2004-04-27
  • 打赏
  • 举报
回复
是VC本身的问题吧。 g++是好的。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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