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