从 CObject 派生进行序列化会导致编译器访问错误

发布于 2024-12-14 00:23:24 字数 692 浏览 0 评论 0原文

我创建了我的类 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 类型的向量。我在程序运行时使用 vecData.push_back(Data)(其中 Data 的类型为 CData)向向量添加新的 CData 对象。

但是当我尝试编译它时,我收到以下错误:

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

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

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

I created my class CData and derived it from CObject, because I need to serialize it.

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;
};

And I use a vector of type vector<CData> in my document class. I add new CData-objects to the vector during the runtime of the program using vecData.push_back(Data) (where Data is of type CData).

But when I try to compile this i get the following error:

error C2248: 'CObject::CObject' : cannot access private member
declared in class 'CObject'

I searched a bit and found out, that it has to do with the CObject-class to be non-copyable or something like this!?!?...

Does anyone know how to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

像极了他 2024-12-21 00:23:24

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

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

我希望这有帮助!

CObject declares the copy constructor as private, so you need to implement the copy constructor (and assignment operator overload) for your class yourself. The CObject constructor documentation says:

The standard C++ default class copy constructor does a member-by-member copy. The presence of the private CObject copy constructor guarantees a compiler error message if the copy constructor of your class is needed but not available. You must therefore provide a copy constructor if your class requires this capability.

I hope this helps!

乱了心跳 2024-12-21 00:23:24

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

Did you happen to forget IMPLEMENT_SERIAL in the .cpp-file?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文