我用vc6的向导插入一个非mfc类,即标准类
然后重载输入输出流
ostream& operator<<(ostream& out,CEntity& obj);
如果只在类中声明,
定义在类的外头,即在.cpp文件中,会发现没法访问该类的私有成员,我已经把她声明为永远类了。如果把整个流函数放在类中,则可以编译过
还有就是在使用这个输入输出流问题。
编译会提示不认识这个类的输入输出流运算。
只有在该文件中声明这个流函数才能编译过,  但我已经把这个类的头文件include;以前我都是吧整个类放在一个头文件中,没遇到这个问题,用向导生成出现了很多问题
请大家给点指点。谢谢啦还有就是如果把整个流函数放在类中,即使是在使用的地方声明也会出现问题,可能是函数的作用域问题吧

解决方案 »

  1.   


    // Entity.h: interface for the CEntity class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_ENTITY_H__436E93DF_905A_4DB9_9F57_162066DE2A94__INCLUDED_)
    #define AFX_ENTITY_H__436E93DF_905A_4DB9_9F57_162066DE2A94__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000#include<iostream>
    using namespace std;class CEntity
    {
    friend ostream& operator<<(ostream& out,CEntity& obj);
    friend istream& operator>>(istream& in,CEntity& obj);
    public:
    UINT& ID();
    CString& Name();
    CEntity();
    virtual ~CEntity();private:
    UINT m_nID;
    CString m_strName;
    };#endif // !defined(AFX_ENTITY_H__436E93DF_905A_4DB9_9F57_162066DE2A94__INCLUDED_)
      

  2.   

    // Entity.cpp: implementation of the CEntity class.
    //
    //////////////////////////////////////////////////////////////////////#include "stdafx.h"
    #include "Entity.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////CEntity::CEntity()
    {
    m_nID=0;
    }CEntity::~CEntity()
    {}CString& CEntity::Name()
    {
    return m_strName;
    }UINT& CEntity::ID()
    {
    return m_nID;
    }ostream& operator<<(ostream& out,CEntity& obj)
    {
    out<<obj.ID()<<obj.Name().GetBuffer(MAX_PATH);
    obj.Name().ReleaseBuffer();
    return out;
    }istream& operator>>(istream& in,CEntity& obj)
    {
    UINT m_nTemp;
    char strTemp[1024];
    in>>m_nTemp>>strTemp;
    obj.ID()=m_nTemp;
    obj.Name()=strTemp;
    return in;
    }
      

  3.   

    这个类是在mfc的工程下创建的Generic Class
      

  4.   

    不是“永远”类,而是“友元”类,是friend 而不是final这是vc6的知名bug,std和friend在一起不行
      

  5.   

    似乎是VC6.0的bug,.net 上好像没这个问题
      

  6.   

    你们说的bug因该是友元函数访问私有变量的那个问题吧
      

  7.   

    所有的< <写成<<