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;
}
。。。。。。
}
是怎么回事呢?该怎么改才不会出现?
...全文
1185 点赞 收藏 4
写回复
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 只是一个普通的类,根本就不行
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告