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



让我们假设我在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"中声明的私有成员

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

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

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

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

还要记住三条规则,这是一条经验法则,声称如果一个类定义了以下其中一个,它可能应该定义所有三个:

  • 析构函数
  • 复制构造函数
  • 复印作业操作员

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

相关内容

  • 没有找到相关文章

最新更新