【问题标题】:Derive from CObject for serialization results in a compiler error for access从 CObject 派生以进行序列化会导致访问时出现编译器错误
【发布时间】:2011-11-06 19:10:26
【问题描述】:

我创建了我的类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)(其中 Data 是 CData 类型)将新的 CData 对象添加到向量中。

但是当我尝试编译这个时,我得到了以下错误:

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

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

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

【问题讨论】:

    标签: c++ mfc constructor derived-class


    【解决方案1】:

    CObject 将复制构造函数声明为private,因此您需要自己为您的类实现复制构造函数(和赋值运算符重载)。 CObject constructor documentation 说:

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

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-05
        • 2023-01-05
        • 1970-01-01
        相关资源
        最近更新 更多