我有这样的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容器,因为标准容器是不受这些限制的替代方法。仅当它们是显而易见的选择并且在GUI代码的上下文中具有完全意义时,才使用MFC容器。否则,请依靠标准容器。

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

关于c++ - 内含CArray的CMap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49521861/

10-11 15:12