代码如下
Book.h#include <afxwin.h>class CBook : public CObject
{
 DECLARE_SERIAL(CBook) public:
  CString m_strName;
  CString m_strAuthor;
  CString m_strPress; public:
  CBook()
  {
   // 要使CBook对象实现序列化,必须定义默认构造函数
  }  CBook(CString strName, CString strAuthor, CString strPress)
  {
   m_strName = strName; // 书名
   m_strAuthor = strAuthor; // 作者
   m_strPress = strPress; // 出版社
  }  void Serialize(CArchive &); // 重载基类的Serialize函数
};Book.cpp#include "Book.h"IMPLEMENT_SERIAL(CBook, CObject, 1)void CBook::Serialize(CArchive &ar)
{
 CObject::Serialize(ar);
 
 if(ar.IsStoring())
 {
  ar << m_strName << m_strAuthor << m_strPress;
 }
 else
 {
  ar >> m_strName >> m_strAuthor >> m_strPress;
 }
}
主程序如下
CBook book1("Programming Windows", "Charles Petzold", "Microsoft Press");
CBook book2("Programming Windows with MFC", "Jeff Prosise", "Microsoft Press");
int nCount = 2;// 序列化,没有问题,可用ultraedit查看没错
CFile fileStore(_T("mybooks.dat"), CFile::modeWrite | CFile::modeCreate);
CArchive arStore(&fileStore, CArchive::store);
CBook* pBooksStore[2] = { &book1, &book2 };
arStore << nCount;
for (int i=0; i<nCount; ++i)
{
 arStore << pBooksStore[i];
}// 反序列化,,出现问题
CFile fileLoad(_T("mybooks.dat"), CFile::modeRead);
CArchive arLoad(&fileLoad, CArchive::load);
arLoad >> nCount;
CBook* pBooksLoad = new CBook[nCount];
for (int i=0; i<nCount; ++i)
{
 arLoad >> pBooksLoad[i];
}提示错误如下 error C2679: 二进制“>>”: 没有找到接受“CBook”类型的右操作数的运算符(或没有可接受的转换)
        d:\vs2005\vc\atlmfc\include\afx.h(1431): 可能是“CArchive &operator >>(CArchive &,ATL::CTimeSpan &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1438): 或“CArchive &operator >>(CArchive &,ATL::CTime &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1644): 或“CArchive &operator >>(CArchive &,CObject *&)”[使用参数相关的查找找到]
        d:\vs2005\vc\atlmfc\include\afx.h(1645): 或“CArchive &operator >>(CArchive &,const CObject *&)”[使用参数相关的查找找到]
        d:\vs2005\vc\atlmfc\include\afxcoll.h(70): 或“CArchive &operator >>(CArchive &,CByteArray *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(145): 或“CArchive &operator >>(CArchive &,CWordArray *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(220): 或“CArchive &operator >>(CArchive &,CDWordArray *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(441): 或“CArchive &operator >>(CArchive &,CObArray *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(516): 或“CArchive &operator >>(CArchive &,CStringArray *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(700): 或“CArchive &operator >>(CArchive &,CObList *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(801): 或“CArchive &operator >>(CArchive &,CStringList *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(1160): 或“CArchive &operator >>(CArchive &,CMapWordToOb *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(1327): 或“CArchive &operator >>(CArchive &,CMapStringToOb *&)”
        d:\vs2005\vc\atlmfc\include\afxcoll.h(1411): 或“CArchive &operator >>(CArchive &,CMapStringToString *&)”
        d:\vs2005\vc\atlmfc\include\afxwin.h(192): 或“CArchive &operator >>(CArchive &,SIZE &)”
        d:\vs2005\vc\atlmfc\include\afxwin.h(193): 或“CArchive &operator >>(CArchive &,POINT &)”
        d:\vs2005\vc\atlmfc\include\afxwin.h(194): 或“CArchive &operator >>(CArchive &,RECT &)”
        d:\vs2005\vc\atlmfc\include\afxdisp.h(947): 或“CArchive &operator >>(CArchive &,COleVariant &)”
        d:\vs2005\vc\atlmfc\include\afxdisp.h(951): 或“CArchive &operator >>(CArchive &,ATL::CComBSTR &)”
        d:\vs2005\vc\atlmfc\include\afxdisp.h(1026): 或“CArchive &operator >>(CArchive &,COleCurrency &)”
        d:\vs2005\vc\atlmfc\include\afxdisp.h(1033): 或“CArchive &operator >>(CArchive &,ATL::COleDateTime &)”
        d:\vs2005\vc\atlmfc\include\afxdisp.h(1040): 或“CArchive &operator >>(CArchive &,ATL::COleDateTimeSpan &)”
        e:\vs实验室\cs\实验对话框\实验对话框\book.h(5): 或“CArchive &operator >>(CArchive &,CBook *&)”[使用参数相关的查找找到]
        d:\vs2005\vc\atlmfc\include\afx.h(1680): 或“CArchive &CArchive::operator >>(BYTE &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1681): 或“CArchive &CArchive::operator >>(WORD &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1682): 或“CArchive &CArchive::operator >>(DWORD &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1683): 或“CArchive &CArchive::operator >>(LONG &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1684): 或“CArchive &CArchive::operator >>(float &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1685): 或“CArchive &CArchive::operator >>(double &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1686): 或“CArchive &CArchive::operator >>(LONGLONG &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1687): 或“CArchive &CArchive::operator >>(ULONGLONG &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1689): 或“CArchive &CArchive::operator >>(int &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1690): 或“CArchive &CArchive::operator >>(short &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1691): 或“CArchive &CArchive::operator >>(char &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1693): 或“CArchive &CArchive::operator >>(wchar_t &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1695): 或“CArchive &CArchive::operator >>(unsigned int &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1696): 或“CArchive &CArchive::operator >>(bool &)”
        d:\vs2005\vc\atlmfc\include\afx.h(1644): 或“CArchive &operator >>(CArchive &,CObject *&)”[使用参数相关的查找找到]
        d:\vs2005\vc\atlmfc\include\afx.h(1645): 或“CArchive &operator >>(CArchive &,const CObject *&)”[使用参数相关的查找找到]
        e:\vs实验室\cs\实验对话框\实验对话框\book.h(5): 或“CArchive &operator >>(CArchive &,CBook *&)”[使用参数相关的查找找到]
        试图匹配参数列表“(CArchive, CBook)”时

解决方案 »

  1.   

    The following is an example of this error:class C
    {
       public:
       C();       // no constructor with an int argument
    } c;
    class D
    {
       public:
       D( int );
       D();
    } d;
    void main()
    {
       c = 10;    // error
       d = 10;    // OK
    }上面这样可以出现你那个问题,你自己再看一下
    也就是你的
    public:
      CBook()
      {
       // 要使CBook对象实现序列化,必须定义默认构造函数
      }
    要修改一下
    加上CBook()里放上CString strName, CString strAuthor, CString strPress
      

  2.   

    你可以说得清楚一些吗???
    我已重载了CBook(CString strName, CString strAuthor, CString strPress)
      {
       m_strName = strName; // 书名
       m_strAuthor = strAuthor; // 作者
       m_strPress = strPress; // 出版社
      }
    期待解决