【发布时间】:2019-09-11 10:04:03
【问题描述】:
所以我有一个函数应该返回以下地图:map<MyObj*, Datastruct>
尝试从包含所述对象的列表中插入对象时:
for(auto element: myList){
Datastruct str;
str.property1 = element.property1;
str.property2 = element.property2;
saidMap.insert(element.PointerToMyObj, str);
}
myList 中的对象包含指向 myObj 的指针和一些我需要从列表移动到地图的属性。在下面的函数中执行了这段代码:
map<MyObj*, Datastruct> listToMap = convertList(myList);
编译器对我大吼大叫:
"没有匹配的函数调用'std::map::insert(MyObj*&, Datastruct&)"
在这里我很无助。我不知道如果 myList(见上文)中的 element 包含
,编译器为什么会显示我正在尝试传递对函数的引用MyObj *PointerToMyObj;
在我看来,哪个是传递给插入函数的正确类型,对吗? 我也尝试过
std::make_pair
因此编译器对我大喊大叫,因为我试图将一对插入到 amap<MyObj*, Datastruct>.
我完全迷路了。有人可以向我解释我做错了什么吗?
【问题讨论】:
-
抱歉,这个问题中的代码格式不正确,StackOverflow 不允许我发布它对我大喊“缩进 4 个空格或按 ctrl+k”,但我试图无济于事。我猜这不是我的日子。
-
您从 IDE 复制代码文本,选择它并按 ctrl+k 或使用 {} 按钮。如果仍然无法正确格式化,请使用网站:format.krzaq.cc 重新格式化,然后粘贴并选择它并按 ctrl+k 或使用 {} 按钮
-
配对尝试的错误是什么?你检查过the reference而不是猜测吗?
-
错误是:“没有匹配函数调用 std::map
::insert(std::pair ” -
提示:不要惊慌,而是 rtfm(阅读-the-fine-manual)。 Insert 确实对您传递的参数没有重载,尽管它还有其他参数:en.cppreference.com/w/cpp/container/map/insert
标签: c++ dictionary insert