用于序列化的来自CObject的派生将导致访问时出现编译器错误

Derive from CObject for serialization results in a compiler error for access

本文关键字:访问 编译器 错误 序列化 CObject 用于 派生      更新时间:2023-10-16

我创建了我的类CData,并从CObject派生了它,因为我需要序列化它。

class CData : public CObject
{
    DECLARE_SERIAL(CData);
public:
    CData();
    virtual ~CData();
    virtual void Serialize(CArchive& ar);
    //Data
    CString m_strName;
    ULONG m_ulID;
    CString m_strCorps;
    CPoint m_Coordinate;
    short m_sStatus;
};

我在文档类中使用vector<CData>类型的向量。我使用vecData.push_back(Data)在程序运行期间添加新的CData-对象到向量(其中数据是CData类型)。

但是当我试图编译这个我得到以下错误:

错误C2248: 'CObject::CObject':无法访问私有成员在类'CObject'中声明

我搜索了一下,发现它与cobject类是不可复制的或类似的东西有关!? ? ? ?…

有谁知道如何解决这个问题吗?

CObject声明复制构造函数为private,因此您需要自己为类实现复制构造函数(和赋值操作符重载)。CObject构造函数文档说:

标准c++默认类复制构造函数执行逐个成员的复制。如果需要类的复制构造函数但不可用,则私有CObject复制构造函数的存在保证会出现编译器错误消息。因此,如果您的类需要此功能,则必须提供复制构造函数。

我希望这对你有帮助!

您是否碰巧忘记了.cpp-文件中的IMPLEMENT_SERIAL ?