假设我在 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/