CArchive 保存自定义数组问题

欢乐马_19e9 2012-11-30 02:46:32
小弟几乎翻遍CSND所有关于CArchive的帖子和百度谷歌了半天依然误解,特此请大牛指点。

直接开问题

自定义的结构体数组通过CArchive保存

	typedef struct _tagMyStruct : CObject
{
CString strTest;

}MyStruct;

MyStruct myStruct[10];


对了,另外我的是 MFC 库。
...全文
223 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐马_19e9 2012-12-15
  • 打赏
  • 举报
回复
引用 9 楼 ForestDB 的回复:
不能啊,除非针对数组再overload一下<<和>>。
嗯,知道啦,谢了哥们,结贴了。
ForestDB 2012-12-14
  • 打赏
  • 举报
回复
不能啊,除非针对数组再overload一下<<和>>。
欢乐马_19e9 2012-12-14
  • 打赏
  • 举报
回复
引用 6 楼 ForestDB 的回复:
怎么的也得有个循环吧。 for (int i = 0; i < 2; i++) ar << a[i]; for (int i = 0; i < 2; i++ ar >> a[i];
不能直接引用吗?
ForestDB 2012-12-14
  • 打赏
  • 举报
回复
因为你的<</>>重载是针对const _tagMyStruct &ob的,而不是它的数组。
ForestDB 2012-12-14
  • 打赏
  • 举报
回复
怎么的也得有个循环吧。 for (int i = 0; i < 2; i++) ar << a[i]; for (int i = 0; i < 2; i++ ar >> a[i];
欢乐马_19e9 2012-12-14
  • 打赏
  • 举报
回复
引用 4 楼 ForestDB 的回复:
话说相关的代码怎样?
上我的代码: 结构体声明
	typedef struct   _tagMyStruct
	{   
		int     a ;   
		float   b;   

		friend CArchive& __stdcall operator<<(CArchive &ar , const _tagMyStruct &ob )
		{
			ar<<ob.a<<ob.b;
			return ar;  
		}

		friend CArchive& __stdcall operator>>(CArchive &ar , _tagMyStruct &ob )
		{
			ar>>ob.a>>ob.b;
			return ar;  
		}

	}structA;
使用:
void CCArchiveDemoDlg::OnBnClickedButton1()
{

	structA a[2];
	a[0].a = 10;
	a[0].b = 100.111;

	a[1].a = 434;
	a[1].b = 134.111;

	CFile fFile(_T("data.dc"),CFile::modeCreate|CFile::modeReadWrite);
	CArchive ar(&fFile,CArchive::store);
	ar << a ;
	ar.Close();
	fFile.Close();

}


void CCArchiveDemoDlg::OnBnClickedButton2()
{

	structA a[2];
	CFile file(_T("data.dc"),CFile::modeRead);
	if(file.m_hFile==CFile::hFileNull){
		MessageBox(_T("没找到数据文件arc.dat"));
		return;
	}
	CArchive ar(&file, CArchive::load);
	ar >> a ;  // 这里出错,error C2679: 二进制“>>”: 没有找到接受“CCArchiveDemoDlg::structA [2]”类型的右操作数的运算符(或没有可接受的转换)
	ar.Close();
	file.Close();

	CString strShow;
	strShow.Format(_T("%d,%f"),a.a,a.b);
	MessageBox(strShow);
}
这里应该怎么样写啊。
ForestDB 2012-12-14
  • 打赏
  • 举报
回复
话说相关的代码怎样?
欢乐马_19e9 2012-12-14
  • 打赏
  • 举报
回复
引用 2 楼 ForestDB 的回复:
话说VC6的tutorial有不错的例子。
这个我也看了啊,可是不行啊,如果行我就不在CSDN上提问了。
ForestDB 2012-11-30
  • 打赏
  • 举报
回复
话说VC6的tutorial有不错的例子。
ForestDB 2012-11-30
  • 打赏
  • 举报
回复
重载MyStruct的<<和>>。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧