我正在尝试为我的std地图的每个键分配一个列表,但是使用new运算符我得到了一些错误(找不到预定义的构造函数和其他错误),为什么?
我的代码就像这样:
std::map<QString, *std::list<ExecutionGUIObject*>> execEvtMap;
execEvtMap["t1"] = new std::list<ExecutionGUIObject*>;
答案 0 :(得分:4)
*std::list<ExecutionGUIObject*>
不是有效类型,因此不是std::map
模板的有效参数。你可能意味着
std::list<ExecutionGUIObject*>*
表示指向ExecutionGUIObject对象指针列表的指针&#39;。
答案 1 :(得分:1)
正如Frerich Raabe所述,它是地图声明中的一个小语法错误。但是你通过动态分配std::list
来获得任何收益,那么为什么要寻找麻烦呢?只需使用列表地图。
std::map<QString, std::list<ExecutionGUIObject*>> execEvtMap;
// Creates a new (empty) list for key "t1" if one does not already exist.
void(execEvtMap["t1"]);
// Creates a new list for key "t1", or clears the existing one.
execEvtMap["t1"].clear();
// Erases a key and its list
execEvtMap.erase("t1");
如果此地图拥有ExecutionGUIObject
,那么您也需要进行调整:
std::map<QString, std::list<std::unique_ptr<ExecutionGUIObject>>> execEvtMap;