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::vectorMicrosoft 编译器错误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您正试图访问CObject
的一些私人成员。由于您的MyClass
和CStringArray
都派生自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 相关的参数