序列化的类的内容如下:
class CNode:public CObject
{
DECLARE_SERIAL( CNode )
public:
CNode( int x, int y );
int m_nY;
int m_nX;
void Serialize( CArchive &ar );
CNode();
virtual ~CNode();};
IMPLEMENT_SERIAL( CNode, CObject, 1 )
CNode::CNode()
{
m_nX = 0;
m_nY = 0;
}CNode::~CNode()
{}void CNode::Serialize(CArchive &ar)
{
// CObject::Serialize( ar );
if( ar.IsStoring )
{
ar<<m_nX<<m_nY;
}
else
{
ar>>m_nX>>m_nY;
}
CObject:: Serialize(ar);}CNode::CNode(int x, int y)
{
m_nX = x;
m_nY = y;
}
在下面函数中读不出数据
读到的是无餐构造函数的值  m_nX=0; m_nY=0;

void CMfcTestDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
CNode *p = new CNode( 10, 10 );
ar<<p;
}
else
{
CNode *p;
ar>>p;
}
}
大家帮忙看看问题在哪

解决方案 »

  1.   


    void CMfcTestDoc::Serialize(CArchive& ar) 

    if (ar.IsStoring()) 
    { } 
    else 
    { } 
    m_node.Serialize(ar);//m_node为CNode型成员变量

      

  2.   

    你不是更改了你构造函数中某些变量或是增加了新成员变量,但是在Serialize(CArchive& ar) 中没有更新。
      

  3.   

    void CNode::Serialize(CArchive &ar) 

    // CObject::Serialize( ar ); 
    if( ar.IsStoring ) 

    ar < <m_nX < <m_nY; 

    else 

    ar>>m_nX>>m_nY; 

    CObject:: Serialize(ar); } 
    CObject:: Serialize(ar); 这句话需要吗?你读写数据都使用该基于文件的吧?
    BOOL CMfcTestDoc::LoadFile()
    {
        CFile f;
        if(f.Open(m_strFileName,CFile::modeRead))
        {
    if(f.GetLength() == 0)
        return FALSE;
            CArchive ar(&f,CArchive::load);
            m_node.Serialize(ar);
        }
        else
           return FALSE;
        return TRUE;
    }BOOL CMfcTestDoc::SaveFile()
    {
        CFile f;
        if(f.Open(m_strFileName,CFile::modeWrite|CFile::modeCreate))
        {
             CArchive ar(&f,CArchive::store);
             m_node.Serialize(ar);
        }
        else
          return FALSE;
        return TRUE;
    }
      

  4.   

    改成这样后读取时出现了异常
    应该是CNode的成员函数Serialize(CArchive& ar )读取时问题
    但我实在看不出来哪里写错了
      

  5.   

    我调试了下我原来的程序
    设置了几个端点,发现尽然运行到下面这里
    ar>>p;——〉CNode::Serialize(CArchive &ar) ——〉 ar<<m_nX<<m_nY;
    在CNode::Serialize(CArchive &ar)中
    ar.IsStoring条件尽然为TRUE而在调用此函数的CMfcTestDoc::Serialize(CArchive& ar)中
    ar.IsStoring条件为FALSE我真的郁闷了
      

  6.   

    为什么要用序列化那种垃圾,直接自己写一个文件读写函数不就得了,我从来不用CDocument类和序列化,用视图从来不用文档,做程序也挺好的
      

  7.   

    郁闷
    犯了低级错误
    void CNode::Serialize(CArchive &ar)中
    ar.IsStoring  后面没写括号