class MyClass : public CObject
{
public:
MyClass();
private:
CStringArray m_myArray;
};
导致错误 c2248
这有什么问题?我认为这与 CStringArray 和 MyClass 都派生自 CObject 的事实有关。
从 CObject 派生的旧类目前使用 CustomArray,这对我来说似乎是错误的,所以我想用 CStringArray 替换它。
Microsoft 编译器错误C2248表示“派生类的成员无法访问基类的私有成员”。
我只能假设您正在尝试MyClass::m_myArray
从代码中的某处直接引用,而不使用公共访问器函数。
更新
真正的答案是问题是由 MyClass 的复制构造函数引起的,试图复制 m_myArray,但它不能,因为默认情况下 CObject 派生类不可复制。解决方案是自己编写一个复制构造函数,而不是尝试复制数组,而是一次复制一个内容,从源数组到目标数组。要么使用,要么使用std::vector
(无论如何你都应该这样做,因为 MFC 容器太可怕了)。
错误C2248
说“派生类的成员不能访问基类的私有成员。”
CStringArray 类不公开 Copy 构造函数和赋值运算符,在代码中查找这些位置并通过 elemnet 副本将代码替换为 elemenet。
您正在尝试访问CObject
. 由于 yourMyClass
和CStringArray
derived from CObject
,如果没有更多上下文,就不可能知道确切的问题。
唯一想到的想法,基本上是因为我已经多次陷入陷阱,那CObject
就是复制构造函数是私有的,所以如果你试图复制CStringArray
或你自己的类,显式或隐式,你会得到错误。
更新:
我刚刚查看了CObject
' 的声明,赋值运算符也是私有的。其他一切要么是公开的,要么是受保护的。