下面是我写的一个类,我要将这个类序列化。但是每当从文件中读取该类的时候总是报错:文件含有非预期的对象。主要问题出在了CWordNodeList m_NodeList;上,如果该列表中有元素则序列化出错。有什么办法来解决这个问题?class CWordNode;typedef CTypedPtrList<CObList,CWordNode*> CWordNodeList;class CWordNode : public CObject
{
DECLARE_SERIAL(CWordNode)
public:
CWordNode();
virtual ~CWordNode(); CWordNodeList m_NodeList;
CString m_NodeName;
CStringArray m_WordList; virtual void Serialize(CArchive& ar);
};序列化代码void CWordNode::Serialize(CArchive& ar)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
ASSERT_VALID(this); if(ar.IsStoring())
{
ar << m_NodeName;
}
else
{
ar >> m_NodeName;
}
m_WordList.Serialize(ar);
m_NodeList.Serialize(ar);
CObject::Serialize(ar);
}
{
DECLARE_SERIAL(CWordNode)
public:
CWordNode();
virtual ~CWordNode(); CWordNodeList m_NodeList;
CString m_NodeName;
CStringArray m_WordList; virtual void Serialize(CArchive& ar);
};序列化代码void CWordNode::Serialize(CArchive& ar)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
ASSERT_VALID(this); if(ar.IsStoring())
{
ar << m_NodeName;
}
else
{
ar >> m_NodeName;
}
m_WordList.Serialize(ar);
m_NodeList.Serialize(ar);
CObject::Serialize(ar);
}
解决方案 »
- opencv视频显示很卡,很慢,内存泄露
- 关于广播消息 如何屏蔽发送方接收到自己的广播消息....
- glu.gluSphere参数设置
- 模糊查询
- VC++ 6.0的CFormView类真的没有ID_EDIT_CLEARALL这个事件吗?VC++.NET有呀。VC++6.0我已经打上SP6补丁了
- 谁能给我一个分页打印scrollview的例子?纸很小(A4)但是scrollview很大,如果解决了问题再送100分
- 工资涨了,年终奖多了,我却更加郁闷了....散一点分....
- 使用ADO怎样获取和修改ACCESS数据库的密码?
- SOS
- 找人从美国带回来一本C++ Primer 3/e,真爽!
- 如何在VC中用程序访问网上邻居中的计算机,其中访问2000时要输入用户名和密码,怎么在程序中输入
- 装了BoundChecker,为什么用向导建的默认程序框架,运行都报内存泄漏
CStringArray m_WordList;
两个容器包容的对象 的序列化对象 还要你自己写。
最好就是自己 一个一个取出来 ,序列化。。
这样 clist carray 是不会给你自己读写文件的
你做了序列化了吗
1、序列化一个不含有子列表的对象;
2、序列化一个包含子列表的对象;但如果先序列化一个包含子列表的对象时程序就出错了。也就是说在不改变类的定义和实现的情况下,执行顺序的不同会产生不同的效果。我觉得好像我需要作一些附加的工作,才能让直接序列化含有子对列表的对象。
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
ASSERT_VALID(this); CObject::Serialize(ar); if(ar.IsStoring())
{
ar << m_NodeName; int i_count;
i_count = m_NodeList.GetCount();
ar << i_count; POSITION pos;
pos = m_NodeList.GetHeadPosition();
CWordNode* pNode;
while(pos)
{
pNode = m_NodeList.GetNext(pos);
pNode->Serialize(ar);
}
}
else
{
ar >> m_NodeName; m_NodeList.RemoveAll();
int i_count;
ar >> i_count; for(int j = 0; j < i_count;j++)
{
CWordNode* pNode = new CWordNode;
pNode->Serialize(ar);
m_NodeList.AddTail(pNode);
}
}
m_WordList.Serialize(ar);
}