如现有结构体
struct Paint_Data
{
   short nType;
   POINT point1;
   POINT point2;
};
Paint_Data m_Data[100];
for(int i=0;i<100;i++)
   ar<<m_Data[i]; //不支持这样,怎么办呢?

解决方案 »

  1.   

    自己重载<<操作符来处理。
      

  2.   

    序列化最终也要一个一个来的。重载该结构对CArchive的<<操作符。
      

  3.   

    for(int i=0;i <100;i++) 
      ar.Write(&m_Data[i], sizeof(Paint_Data)) ;或者直接
      ar.Write(m_Data, sizeof(Paint_Data)*100) ;
      

  4.   

    把这个结构体写成类,该类继承自CObject,然后再写序列化函数
      

  5.   

    把struct Paint_Data 
    写成序列化的类。就可以处理了
      

  6.   

    我写成类了,可编译时老是提示什么异常的文件末尾等错误
    .h文件
    class CPaint_Data : public CObject
    {
        DECLARE_SERIAL( CPaint_Data )
    public:
        short sType; //图元类型; 0:直线;1:矩形;2:圆(椭圆)形
    POINT Point1; //第一个点坐标
    POINT Point2; //第二个点坐标
    public:
        // empty constructor is necessary
        CPaint_Data(){};
        CPaint_Data(short Type,POINT P1,POINT P2)
    {
    sType=Type;
    Point1=P1;
    Point2=P2;
    }    void Serialize( CArchive& archive );
        
        // rest of class declaration
    };
    .cpp文件
    #include "CPaint_Data.h"IMPLEMENT_SERIAL( CPaint_Data, CObject, 1 )void CPaint_Data::Serialize( CArchive& archive )
    {
        // call base class function first
        // base class is CObject in this case
        CObject::Serialize( archive );    // now do the stuff for our specific class
    if( archive.IsStoring())
    archive<<sType<<Point1<<Point2;
    else
    archive>>sType>>Point1>>Point2;
    }
    看看有什么问题吗?
      

  7.   

    序列化必须一个一个来的。重载该结构对CArchive的 < <操作符。楼主又可以学习很多东西了哈
      

  8.   

    c:\documents and settings\ytx\桌面\drawtest\cpaint_data.cpp(17) : fatal error C1010: unexpected end of file while looking for precompiled header directive
    Generating Code...
    Error executing cl.exe.
    Creating browse info file...
    BSCMAKE: error BK1506 : cannot open file '.\Debug\CPaint_Data.sbr': No such file or directory
      

  9.   

    在cpaint_data.cpp文件开头加上
    #include "stdafx.h"
      

  10.   

    好了,但我那样在序列化时: 
    ar<<m_Data[i]或者ar>>m_Data[i];
    还是编译不过去,这样封的类还不行吗?
    错误提示如下:Deleting intermediate files and output files for project 'DrawTest - Win32 Debug'.
    --------------------Configuration: DrawTest - Win32 Debug--------------------
    Compiling resources...
    Compiling...
    StdAfx.cpp
    Compiling...
    CPaint_Data.cpp
    DrawTest.cpp
    DrawTestDoc.cpp
    C:\Documents and Settings\ytx\桌面\DrawTest\DrawTestDoc.cpp(72) : error C2678: binary '<<' : no operator defined which takes a left-hand operand of type 'class CArchive' (or there is no acceptable conversion)
    C:\Documents and Settings\ytx\桌面\DrawTest\DrawTestDoc.cpp(81) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class CPaint_Data' (or there is no acceptable conversion)
    DrawTestView.cpp
    MainFrm.cpp
    Generating Code...
    Error executing cl.exe.
    Creating browse info file...DrawTest.exe - 2 error(s), 0 warning(s)
      

  11.   

    现在应该是这样用了
    m_Data[i].Serialize(ar);
      

  12.   

    可以的,它是用CArchive对象进行判断的
    void CPaint_Data::Serialize( CArchive& archive )
    {
        // call base class function first
        // base class is CObject in this case
        CObject::Serialize( archive );    // now do the stuff for our specific class
        if( archive.IsStoring())
            archive<<sType<<Point1<<Point2;
        else
            archive>>sType>>Point1>>Point2;
    }
      

  13.   

    我发现我这个类对象数组m_Data[100]不太好保存数据,不知道一般都怎么来保存这样的东西,比如我画了一个直线,我就往里边存一个,但我不知道该往哪个里边存,也就是不知道那个i应该是几了
      

  14.   

    可以考虑用CArray或者vector等模板数组