0
class MyClass : public CObject
{
public:
   MyClass();

private:
   CStringArray m_myArray;
};

导致错误 c2248

这有什么问题?我认为这与 CStringArray 和 MyClass 都派生自 CObject 的事实有关。

从 CObject 派生的旧类目前使用 CustomArray,这对我来说似乎是错误的,所以我想用 CStringArray 替换它。

4

3 回答 3

1

Microsoft 编译器错误C2248表示“派生类的成员无法访问基类的私有成员”。

我只能假设您正在尝试MyClass::m_myArray从代码中的某处直接引用,而不使用公共访问器函数。

更新 真正的答案是问题是由 MyClass 的复制构造函数引起的,试图复制 m_myArray,但它不能,因为默认情况下 CObject 派生类不可复制。解决方案是自己编写一个复制构造函数,而不是尝试复制数组,而是一次复制一个内容,从源数组到目标数组。要么使用,要么使用std::vector(无论如何你都应该这样做,因为 MFC 容器太可怕了)。

于 2012-09-21T12:55:50.990 回答
0

错误C2248说“派生类的成员不能访问基类的私有成员。”

CStringArray 类不公开 Copy 构造函数和赋值运算符,在代码中查找这些位置并通过 elemnet 副本将代码替换为 elemenet。

于 2012-09-24T08:21:45.997 回答
0

您正在尝试访问CObject. 由于 yourMyClassCStringArrayderived from CObject,如果没有更多上下文,就不可能知道确切的问题。

唯一想到的想法,基本上是因为我已经多次陷入陷阱,那CObject就是复制构造函数是私有的,所以如果你试图复制CStringArray或你自己的类,显式或隐式,你会得到错误。

更新:
我刚刚查看了CObject' 的声明,赋值运算符也是私有的。其他一切要么是公开的,要么是受保护的。

于 2012-09-24T07:47:56.503 回答