MFC文件保存和读取的有关问题

MFC文件保存和读取的问题。
我在界面画完图形后,我想把这个保存。其实我自己定义了一个CGraphicElement类,这个类的构造函数函数为:
CGraphicElement::CGraphicElement(sGraphicFormat geFmt,sGraphicHeader geHdr,sPointPosition * psPstn)
其实sGraphicFormat,sGraphicHeader和sPointPosition都是自己写的结构体。
还有一个CTypedPtrArray<CObArray,CGraphicElement*> sogOA用来保存画好的数据。
然后我在CGraphicElement类中写了一个Serialize函数:
void CGraphicElement::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar<<geFormat<<geHeader<<sPntPosition;
}
else
{
ar>>geFormat>>geHeader>>sPntPosition;
}
}
调试出线了两个错误,
error C2678: 二进制“<<”: 没有找到接受“CArchive”类型的左操作数的运算符(或没有可接受的转换)
error C2679: 二进制“>>”: 没有找到接受“sGraphicFormat”类型的右操作数的运算符(或没有可接受的转换)
这个问题要怎么解决啊?

------解决方案--------------------
CArchive并不支持结构体的直接序列化, 要在你的几个结构体重写序列化操作符 
void operator << (CArchive& ar)
{
……//保存代码
}
void operator >> (CArchive& ar)
{
……//读取代码
}


------解决方案--------------------
举个例子
C/C++ code

struct _testStruct
{    
    int iVal;
    long lVal;
}testStruct;

CArchive& AFXAPI operator<<(CArchive& ar, _testStruct &_tstruct)
{
    return ar << _tstruct.iVal << _tstruct.lVal;    
}

CArchive& AFXAPI operator>>(CArchive& ar, _testStruct &_tstruct)
{
    return ar >> _tstruct.iVal >> _tstruct.lVal;
}


// CSDI_1Doc 序列化
void CSDI_1Doc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: 在此添加存储代码
        int iVal =1;
        ar << iVal << testStruct;
    }
    else
    {
        // TODO: 在此添加加载代码
        int iVal;
        ar >> iVal >> testStruct;
    }
}

------解决方案--------------------
楼上正解,自己的类需要重载操作符,感觉楼主对操作符也不熟悉,要么索性别用Operator了,自己写数据加载和拷贝函数