MFC结构数组
Posted
技术标签:
【中文标题】MFC结构数组【英文标题】:MFC structure array 【发布时间】:2014-05-30 08:45:56 【问题描述】:我想用 C++ 创建一个结构数组。我不知道大小,所以我想让它动态化。我尝试过使用 CList,但失败了。所以我尝试使用向量,但我有同样的错误。
我的标题中有以下结构:
typedef CArray<CArray<double, double>,double> ObjectArray;
struct MyStruct
CString type;
CString name;
ObjectArray value;
;
std::vector<MyStruct> ST;
在我的 cpp 文件中,我有以下代码来填充我的数组。 STR 是我预先填充的结构。
ST.push_back(STR);
构建时出现以下错误:
c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxtempl.h(262): 错误 C2248: 'CObject::CObject' : 无法访问在类 'CObject
我想我做错了什么,但我不明白我错过了什么。
【问题讨论】:
STR
的类型是什么? MyStruct
(应该)?
更好地展示你如何填充 STR...
copy-constructor
可能是private
,但是看你的代码也说不出来。
【参考方案1】:
为什么不将 MFC 容器与 STL 容器混合使用,为什么不始终使用std::vector
?
#include <vector>
typedef std::vector<std::vector<double> > ObjectArray;
struct MyStruct
CString type;
CString name;
ObjectArray value;
;
std::vector<MyStruct> ST;
CString
没问题(CString 有它的用途,也可以复制)。然而,在当今时代,使用 MFC 容器代替 STL 容器的情况很少,如果有必要的话。我读到即使微软也不再在他们的基于 C++ 的程序中使用它们,现在只使用 STL 容器。
【讨论】:
非常感谢。正如大家所说,混合 MFC/STL 是错误的根源。通过用 STL 容器替换我的 ObjectArray,我不再有错误。以后我会尽量坚持STL容器。【参考方案2】:如果您从CObject
派生类,则必须提供自定义复制构造函数,请参见此处:
http://msdn.microsoft.com/en-us/library/st9cdfkz.aspx
“标准 C++ 的默认类复制构造函数执行逐个成员的复制。如果您的类的复制构造函数需要但不可用,则私有 CObject 复制构造函数的存在保证了编译器错误消息。因此,您必须提供如果您的类需要此功能,则为复制构造函数。”
我猜结构内部的CArray
会产生问题,因为它是从CObject
派生的,并且没有定义自定义复制构造函数,请参见此处:
http://msdn.microsoft.com/en-us/library/4h2f09ct.aspx
要么不使用它,要么从CArray
派生一些CDerivedArray
并在那里定义一个自定义复制构造函数。
为什么不使用std::vector
或std::map
或其他STL 类而不是CArray
?
【讨论】:
以上是关于MFC结构数组的主要内容,如果未能解决你的问题,请参考以下文章