CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

有关iostream,iostream.h和命名冲突......

楼主zjh7547()2006-08-03 17:48:19 在 C/C++ / C++ 语言 提问

看<<STL源码剖析>>时看到一个例子(1.9.4节:increment/decrement/dereference),在vc上不能通过编译,在查找原因的过程中,发现了一个不好理解的怪问题......  
  如下四个经过简化的小例子中.  
  //code   A:  
  #include   "vector"       //  
  #include   "iostream.h"  
  using   namespace   std;  
   
  class   CINT    
  {    
  friend   ::ostream&   operator<<(::ostream&   os,   const   CINT&   i)   ;  
  public:    
  CINT(int   i)   :   m_i(i)   {   };    
  private:    
  int   m_i;    
  };    
   
  ::ostream&   operator<<(::ostream&   os,   const   CINT&   i)  
  {  
  os   <<   "value   :   "   <<   i.m_i   <<   endl;    
  return   os;    
  }  
  void     main()      
  {    
  CINT   m(5)   ,   n(10);    
  cout<<   m   ;  
  cout   <<   n   ;              
  }  
   
  //code   B  
  #include   "vector"  
  #include   "iostream.h"  
  using   namespace   std;  
   
  class   CINT    
  {    
  friend   ::ostream&   operator<<(::ostream&   os,   const   CINT&   i)    
  {  
  os   <<   "value   :   "   <<   i.m_i   <<   endl;    
  return   os;    
  }  
  public:    
  CINT(int   i)   :   m_i(i)   {   };    
  private:    
  int   m_i;    
  };    
   
  void     main()      
  {    
  CINT   m(5)   ,   n(10);    
  cout<<   m   ;  
  cout   <<   n   ;              
  }  
   
  //code   C  
  #include   "vector"       //  
  #include   "iostream"  
  using   namespace   std;  
   
  class   CINT    
  {    
  friend   ostream&   operator<<(ostream&   os,   const   CINT&   i)  
  {  
  os   <<   "value   :   "   <<   i.m_i   <<   endl;    
  return   os;    
  }  
  public:    
  CINT(int   i)   :   m_i(i)   {   };    
  private:    
  int   m_i;    
  };    
   
  void     main()      
  {    
  CINT   m(5)   ,   n(10);    
  cout<<   m   ;  
  cout   <<   n   ;              
  }  
   
  //code   D  
  #include   "vector"       //  
  #include   "iostream"  
  using   namespace   std;  
   
  class   CINT    
  {    
    friend   ostream&   operator<<(ostream&   os,   const   CINT&   i)   ;  
   
  public:    
  CINT(int   i)   :   m_i(i)   {   };    
  private:    
  int   m_i;    
  };    
  ostream&   operator<<(ostream&   os,   const   CINT&   i)  
  {  
  os   <<   "value   :   "   <<   i.m_i   <<   endl;    
  return   os;    
  }  
   
  void     main()      
  {    
  CINT   m(5)   ,   n(10);    
  cout<<   m   ;  
  cout   <<   n   ;              
  }  
  前3段代码都是可以正确运行的,第四个却无法通过编译,似乎C和D没什么区别,不知为何? 问题点数:30、回复次数:4Top

1 楼zjh7547()回复于 2006-08-03 17:51:35 得分 0

编译环境:VC6.0,在C++.NET下并没有iostream.h,   将友元操作符定义在类的内部和外部也都行,不存在6.0里的上述问题.Top

2 楼du51(郁郁思扬)回复于 2006-08-03 17:54:25 得分 0

身边没VC是不是VC对标准的支持不好造成的?  
  我记得原来用VC的时候对友元支持的不好.Top

3 楼jigangwang(wang)回复于 2006-08-03 17:55:50 得分 0

vc对stl和友元支持的都不好,还是用dev   c++好Top

4 楼ugg(逸学堂(exuetang.net))回复于 2006-08-03 18:00:28 得分 0

VC7.1没有问题。  
   
  #include   <vector>//  
  #include   <iostream>Top

相关问题

关键词

得分解答快速导航

  • 帖主:zjh7547

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo