64,642
社区成员
发帖
与我相关
我的任务
分享
typedef struct _tagMyStruct : CObject
{
CString strTest;
}MyStruct;
MyStruct myStruct[10];
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);
}
这里应该怎么样写啊。