CObject、CStringArray 和错误 C2248

Posted

技术标签:

【中文标题】CObject、CStringArray 和错误 C2248【英文标题】:CObject, CStringArray and error C2248 【发布时间】:2012-09-21 12:52:53 【问题描述】:
class MyClass : public CObject

public:
   MyClass();

private:
   CStringArray m_myArray;
;

导致错误 c2248

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

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

【问题讨论】:

您是否尝试点击错误将您带到问题的位置? 顺便说一句,我会使用 std::vector 而不是 CStringArray。 【参考方案1】:

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

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

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

【讨论】:

错误 C2248: 'CObject::CObject' : 不可能的 d'accéder à private membre déclaré(e) dans la classe 'CObject' c:\program files\microsoft visual studio 9.0\vc\atlmfc\ include\afxcoll.h 590 在该 typedef LPCTSTR BASE_ARG_TYPE 处停止; CStringArray 类的 当我在 Visual Studio 2010 中试用它时,它对我来说绝对没问题。尝试使用 std::vector 而不是 CStringArray。 我现在宁愿使用 CStringArray 并坚持使用 MFC,也不愿将框架与 std::vector 混合使用。按照你所说的 std::vector<:string> 会更好,但这是另一个问题。 好的,似乎使用 std::vector 是最简单的解决方案。我的问题与此类似:social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/… 更重要的是,我意识到这就是我遗留代码中的 CustomArray 类的用途,以解决该问题。【参考方案2】:

您正试图访问CObject 的一些私人成员。由于您的MyClassCStringArray 都派生自CObject,因此如果没有更多上下文,就不可能知道确切的问题。

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

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

【讨论】:

相关问题:***.com/questions/11833496/…【参考方案3】:

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

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

【讨论】:

以上是关于CObject、CStringArray 和错误 C2248的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2248:“CObject::CObject”:当我在 MFC 中调用 hDC.SelectObject 函数时,无法访问在“CObject”类中声明的私有成员

错误 C2661:“CObject::operator new”:没有重载函数需要 4 个与 Visual Studio 相关的参数

C++/CLI 包装器尝试使用 MFC CObject 继承

CStringArray

将字符串方程转换为 CStringarray - MFC

在调试器上一一显示 CStringArray 中的元素?