【发布时间】:2020-02-26 10:33:30
【问题描述】:
我正在尝试为<MyKey, MyValue> 创建一个 std::map。 MyKey 是一个枚举,MyValue 是一个外部类。
调用myMap.insert({ key, value }) 总是导致编译失败并出现错误
"cannot convert argument 1 from 'std::pair<MyKey, MyValue>' to 'std::pair<const _Kty,_Ty> &&'"
尽管原始数据类型始终与std::map.insert() 一起使用,但在尝试包含其他人编写的类时,这个问题经常发生。对于不同的第三方类,我尝试了许多解决方法,例如预先构造对象或在插入后设置它们的属性。但是我还没有找到解决这个问题的系统方法。似乎std::map 比python 的dict 更难做到。
示例:使用第三方库 cppzmq,Visual Studio 2017
enum MyKey {
key1,
key2
}
std::map<MyKey, zmq::socket_t> mymap;
std::shared_ptr<zmq::context_t> g_context = std::make_shared<zmq::context_t>(1);
zmq:socket_t sock(*g_context, zmq::socket_type::pair);
mymap.insert({ key1, sock });
给我上面的错误。
这个错误是什么意思,一般如何解决?
请帮忙。
【问题讨论】:
-
如果没有minimal reproducible example,很难给出一个有说服力的答案。
-
@RSahu 我正在尝试这样做并更新了我的问题。
-
我猜
zmq::socket_t是不可复制的 -
zmq::socket_tis movable 所以你可以尝试移动而不是复制
标签: c++ build compilation initializer