我写了一个小类。定义基本如下。//----------------------------------------------------------------------------
#ifdef _MANAGERLIB_EXPORT_
#define COMEXP __declspec(dllexport)
#else
#define COMEXP
#endif
//----------------------------------------------------------------------------class COMEXP CDownCatalog : public CObject  
{
friend class CDownCatalogManager;
public:
CDownCatalog(CString sName, CString sPath);
void Serialize(CArchive &ar);
void AddItem(CString sName, CString sPath);
void AddItem(const CDownCatalog & c);
void Builds(CDownCatalog*);
CDownCatalog();
CDownCatalog(const CDownCatalog &c);
virtual ~CDownCatalog();void operator = (const CDownCatalog &c);
protected:
CObArray m_subItemAr;  // 包含的是子项。也是CDownCatalog的指针。
CString m_sName;
CString m_sPath;
};//------------------------
// 下面是部分代码
//------------------------
void CDownCatalog::AddItem(const CDownCatalog &c)
{
this->m_subItemAr.Add(new CDownCatalog(c));
}CDownCatalog::CDownCatalog(const CDownCatalog &c)
{
this->m_sName = c.m_sName;
this->m_sPath = c.m_sPath;
TRACE("Call copy ctor %s %s\n", m_sName, m_sPath); int i = c.m_subItemAr.GetSize();
for (int j(0); j < i; ++j)
{
CDownCatalog *p = (CDownCatalog*)c.m_subItemAr[j];
CDownCatalog *pD = new CDownCatalog(*p); m_subItemAr.Add(pD);
}
}void CDownCatalog::Serialize(CArchive &ar)
{
if (ar.IsLoading())
{
ar >> m_sPath >> m_sName;
}
else
{
TRACE(" path is : %s \t name is %s\n", m_sPath, m_sName);
ar << m_sPath << m_sName;
} // 这句有异常。为什么?
m_subItemAr.Serialize(ar);
}如果我的方法不正确。那么请问一下我该怎么办呢???.
如果是list。或者数组结构都好办。

解决方案 »

  1.   

    当然。可以用xml实现。还有别的方法吗?
      

  2.   

    头文件中少了DECLARE_SERIAL( CDownCatalog  )
    CPP中开始处少了IMPLEMENT_SERIAL(CDownCatalog , CObject)
      

  3.   

    在Serialize的时候
    一般时
     ar >> 一个变量 ;
      我没有使用过
      ar >> 变量 >> 变量 ;不知道这句话对不对
    改为使用
       ar >> sdfs ;
       ar >> asdfasd ;
    可能更好,因为不知道操作符号的重载有没有问题