mfc - 使用 CObject 派生类作为 CList 的类型参数时出现错误 C2248

标签 mfc operator-overloading clist

假设我在 MFC 项目中声明了以下类:

class CProfession : public CObject
{
public:
    CProfession();
    virtual ~CProfession();

    int ID;
    CString name;
};

class CPerson : public CObject
{
public:
    CPerson();
    virtual ~CPerson();

    int ID;
    CString name;
    int age;
    CString email;
    CList<CProfession, CProfession&> profession;
};

由于 CList 声明(如上所示),我收到以下错误: 错误 C2248:“CObject::operator =”:无法访问类“CObject”中声明的私有(private)成员

我已经尝试过实现多种重载和复制构造函数,但没有取得任何成功。我意识到还有其他可能性可以解决此错误,例如使用指针,但我确实在寻找完全适合我提供的代码的解决方案。有谁知道如何解决这个问题吗?

最佳答案

由于 operator=(const CObject&) 在基类中被声明为私有(private),因此您必须在派生类中提供公共(public)赋值运算符:

CProfession& operator=( const CProfession& other ) {
    this->ID = other.ID;
    this->name = other.name;
    return *this;
}

根据您想要实现的语义,您可能必须根据您的要求调整实现。

另请记住 Rule of three ,一条经验法则声称,如果一个类定义了以下其中一项,那么它可能应该定义所有三个:

  • 析构函数
  • 复制构造函数
  • 复制赋值运算符

以上所有内容都是由编译器隐式实现的,除非程序员声明它们。三法则的基本原理是,如果编译器生成的成员函数之一不适合类的需要并且必须由程序员定义,那么其他成员函数可能也不适合。

关于mfc - 使用 CObject 派生类作为 CList 的类型参数时出现错误 C2248,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18242172/

相关文章:

c++ - VS 2013 上的 v120_xp 和 v120 有什么区别?

C++ MFC - 将字符串添加到组合框会阻止窗口打开

windows - 从 SendMessage() + WM_COPYDATA 获取响应

php - 如何在 Yii 中使用 CListView 自定义 dataProvider

Python clist 小部件不返回预期列表,仅返回每个项目的第一个字符

checkbox - CListCtrl 带复选框的问题

c# - == 运算符的行为是否应该与 Equals() 完全相同?

lua metatable __lt __le __eq 返回值的强制 bool 转换

oop - matlab subsref : {} with string argument fails, 为什么?