博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++重载输入输出运算符重载在VC6.0中通不过编译

Posted on 2011-09-01 21:07  李大嘴  阅读(2218)  评论(0编辑  收藏  举报
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class CBase  
  5. {  
  6. private:  
  7.  int m_a;  
  8. protected:  
  9.  int m_pp;  
  10. public:  
  11.  CBase(int a,int pp): m_a(a),m_pp(pp){}  
  12.  friend ostream& operator<<(ostream &out, const CBase &b);  
  13. };  
  14.   
  15. ostream& operator<<(ostream &out, const CBase &b)  
  16. {  
  17.  out<<b.m_a<< " "<<b.m_pp<<endl;  
  18.  return out;  

编译时,却提示

error C2248: 'm_a: cannot access private member declared in class CBase

error C2248: 'm_pp: cannot access private member declared in class CBase

 

这就奇怪了,友元函数不是能访问类的私有成员变量吗?怎么就不行了。

后来得知,原来我用的是VC++6.0编译器,在vs2005上就没问题了。或者把头文件包含写成

#include <iostream.h>

//using namespace std

就可以了。