error C2597: 对非静态成员“Notice::NoticeFlag”的非法引用

kc999001 2009-08-30 12:56:54
struct Notice
{
CTime T;
CString str;
bool NoticeFlag; //是否提示过标志

Notice()
{
T = CTime::GetCurrentTime();
str="";
NoticeFlag = true;
}

friend CArchive& operator>> (CArchive& ar,Notice& p)
{
ar >> p.T >> p.str>>NoticeFlag;//这儿出现上面的错误
return ar;
}
。。。。。。
}
是怎么回事呢?该怎么改才不会出现?
...全文
1358 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kc999001 2009-08-30
  • 打赏
  • 举报
回复
谢谢了
wltg2001 2009-08-30
  • 打赏
  • 举报
回复
总结一下吧,一个类要想支持序列化要经过以下步骤:
一、从 CObject 派生类 (或从 CObject 派生的某个类中派生)。
二、重写 Serialize 成员函数 。
三、在头文件中使用 DECLARE_SERIAL 宏,写在类声明中。
四、定义不带参数的构造函数 。
五、在实现文件中使用 IMPLEMENT_SERIAL 宏 。
wltg2001 2009-08-30
  • 打赏
  • 举报
回复
一个类要想支持序列化必须这样定义才行:
class CMyObject : public CObject
{
// ...Member functions
public:
CMyObject() { }
virtual void Serialize( CArchive& ar ) { }
// Implementation
protected:
DECLARE_SERIAL( CMyObject ) //这个必须要加
};
另外在CPP文件中还要加上这个:IMPLEMENT_SERIAL(CMyObject,CObject,1)
wltg2001 2009-08-30
  • 打赏
  • 举报
回复
这样写是不行的,CArchive是MFC才能支持的,你的struct Notice 只是一个普通的类,根本就不行

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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