我有一个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:&#39; CObject :: CObject&#39; :无法访问类&#39; CObject&#39;
中声明的私有成员
不知道发生了什么!!欢迎任何帮助。
我尝试使m_mUserNameMap
不是指针,并且在该行本身中给出了上述错误。
答案 0 :(得分:6)
使用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;
答案 1 :(得分:0)
但是,问问自己是否真的必须使用MFC容器
我自己会说,是的。 MFC比标准库更受青睐。两个原因:
---一个例子: 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不是标准库...它们都是开放源代码资源... IMO,太过舒适了。