CObject,CStringArray和错误C2248

时间:2012-09-21 12:52:54

标签: arrays mfc

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

private:
   CStringArray m_myArray;
};

导致错误c2248

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

派生自CObject的Legacy类目前使用CustomArray它对我来说似乎不对,所以我想用CStringArray替换它。

3 个答案:

答案 0 :(得分:1)

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

我只能假设您尝试从代码中的某个位置直接引用MyClass::m_myArray,而不使用公共访问器功能。

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

答案 1 :(得分:0)

您正在尝试访问CObject的某个私人成员。由于MyClassCStringArray都来自CObject,因此无需更多背景信息就无法确定问题。

我想到的唯一想法,主要是因为我已多次陷入陷阱,CObject的复制构造函数是私有的,所以如果你试图复制{{1}或者你自己的类,显式或隐式,你会得到错误。

<强>更新
我刚刚看了CStringArray的声明,而赋值运算符也是私有的。其他一切都是公开的或受保护的。

答案 2 :(得分:0)

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

CStringArray类不会公开复制构造函数和赋值运算符,查找这些地方的代码,并用elemnet copy替换elemenet代码。