Visual C++, CArchive Serialize
Visual C++, CArchive Serialize
我用Visual Studio 2010学习Visual c++。我尝试使用MFC对象的序列化功能。我不能用Serialize函数加载对象我的代码:
#include <afxwin.h>
#include <iostream>
using std::cout;
using std::endl;
// CMyObject
class CMyObject : public CObject
{
public:
int x, y;
CMyObject(int _x=0, int _y=0) : CObject(), x(_x), y(_y) {}
void Serialize(CArchive &ar);
void Print() const;
DECLARE_SERIAL(CMyObject)
};
IMPLEMENT_SERIAL(CMyObject, CObject, 1)
void CMyObject::Serialize(CArchive &ar)
{
CObject::Serialize(ar);
if (ar.IsStoring())
ar << x;
else
ar >> x;
}
void CMyObject::Print() const
{
cout << "CMyObject (" << x << "," << y << ")" << endl;
}
int main()
{
CMyObject cm(1,3);
CFile fileS, fileL;
fileS.Open(L"C:\CMyObject.dat", CFile::modeWrite | CFile::modeCreate);
CArchive arStore(&fileS, CArchive::store);
cm.Print();
cm.Serialize(arStore);
arStore.Close();
cm.x = 2;
cm.Print();
fileL.Open(L"C:\CMyObject.dat", CFile::modeRead);
CArchive arLoad(&fileL, CArchive::load);
cm.Serialize(arLoad);
cm.Print();
arLoad.Close();
}
程序在字符串上死亡:
cm.Serialize(arLoad);
你能告诉我这个代码有什么问题吗?
您应该检查对Open()
的调用是否失败。您在完成写入后忘记关闭文件。关闭归档对象后添加fileS.Close();
。
if(!fileS.Open(L"C:\source\CMyObject.dat", CFile::modeWrite | CFile::modeCreate))
{
std::cout << "Unable to open output file" << std::endl;
return 1;
}
CArchive arStore(&fileS, CArchive::store);
cm.Print();
cm.Serialize(arStore);
arStore.Close();
fileS.Close(); // <--- close the file
if(!fileL.Open(L"C:\source\CMyObject.dat", CFile::modeRead))
{
std::cout << "Unable to open input file" << std::endl;
return 1;
}
CArchive arLoad(&fileL, CArchive::load);
cm.Serialize(arLoad);
cm.Print();
arLoad.Close();
fileL.Close(); // <--- close the file
为了让MFC在反序列化过程中动态创建对象,你的类定义必须提供一个不带参数的构造函数。参考:
http://msdn.microsoft.com/en-us/library/47ecfxkh.aspx相关文章:
- Json Serialize Vector to json<Class> array (nlohmann/json.hpp)
- MATLAB API用于使用MatgetDir的C例外:Matrix :: Serialize ::在内存位置内置
- 提升序列化仅适用于主要?当我在其他对象中使用时,继续说"has no member named ‘serialize’"
- 在C++中使用 CArchive 类从二进制文件中读取短数据
- Visual Studio 2012 错误 C2039: 'serialize': 不是 'std::shared_ptr<_Ty>' 的成员
- json serialize c++
- 使用 boost::serialize (使用 SSCCE) 反序列化多个值
- 构建 PCL:pcl_kdtree".serialize 的左侧必须具有类/结构/联合"
- OpenCV 3 and ArUco lib - Serialize Dictionary
- matPutVariable:尝试将数据输出到mat文件时出错(matrix::serialize::WrongSize
- Eigen and boost::serialize
- 使用Boost:serialize反序列化指向派生类的指针时出现问题
- 从CArchive保存的二进制数据中读取结构数组
- 错误 C2039:'serialize':不是矢量类型的成员
- Visual C++, CArchive Serialize
- 'struct std::pair<int, int>'没有名为'serialize'的成员
- 在InternalSerializeWithCachedSizesToArray时,protobuf Serialize
- 我可以重载 CArchive <<运算符来处理 std::string 吗?
- 如何重写boost::serialize获得指向对象的指针时发生的情况
- boost::Serialize VS std::fstream