CMap with CArray Inside it

CMap with CArray Inside it

本文关键字:it Inside CArray with CMap      更新时间:2023-10-16

我有一个 typedef结构:

typedef struct
{
    int id;
    CString name;
} USER_NAME;
CMap<int,int, CArray<USER_NAME>, CArray<USER_NAME>> * m_mUserNameMap;

在CPP文件中:

CArray<USER_NAME> sUName;
sUName.id = 10;
sUName.name = "Test it!!!";
m_mUserNameMap = new CMap<int,int, CArray<USER_NAME>, CArray<USER_NAME>>;
m_mUserNameMap->SetAt(1, sUName); 

我会遇到以下错误:

错误C2248:'Cobject :: Cobject':无法访问类'Cobject''

不知道发生了什么!欢迎任何帮助。

我尝试使m_mUserNameMap不是指针,而在该行本身中给出上述错误。

使用CMap要求值类型是可复制构造且可分配的,但是这些操作被标记为CObject衍生类(例如CArray(的私有。这就是为什么您会收到该错误消息的原因。

您无法像尝试一样声明地图。您能做的就是将值类型作为指针。因此,您将在地图上添加数组的地址,而不是期望副本的数组本身。

CMap<int, int, CArray<USER_NAME> *, CArray<USER_NAME> *> *m_mUserNameMap;

但是,问问自己是否真的必须使用MFC容器,因为标准容器是不受这些限制的替代方案。仅当MFC容器是显而易见的选择,并且在GUI代码的上下文中完全有意义。否则依靠标准容器。

std::map<int, std::vector<USER_NAME>> *m_mUserNameMap;

但是,问自己是否真的必须使用MFC容器

我本人会说,是的。MFC比标准LIB最喜欢。两个原因:

---一个例子:YouTube视频:C Now 2018:Z. Laine" Boost.Text:修复STD :: String,并将Unicode添加到标准C (第1部分("https://www.youtube.com/watch?v=944gjkxwmbo -STD :: String显然非常低效。另外,似乎标准图书馆缺乏专用的支持……如果他们可以修复它,他们会。很像Linux世界中发生的事情。

----另一个原因:论坛线程发布在www.cplusplus.com: Linux开发人员威胁要拉"杀死开关"http://www.cplusplus.com/forum/lounge/243067/ - 虽然Linux不是标准库...它们都是开源资源...太接近了舒适。