因此函数如下:
void spawn(const param ¶) {
// ...
}
param
是typedef std::unordered_map<std::string, std::variant<int, float>> param;
我是这样称呼它的:
spawn({{"x", 450}, {"y", 324}, {"vel", 1.0}, {"increaser", 0.05}, {"direction", 120}});
这是一个错误:
没有构造函数的实例"std::unordered_map<_键、_Tp、_Hash、_Pred、_Alloc>:unordered_map[其中_Key=std::string,_Tp=std::variant<int,float>,_Hash=std:;Hash<std::string>;,_Pred=std::equal_to<std:::string>,_Alloc=std::分配器<std::对<const std::字符串,std::variant<int,float>]"匹配参数列表--参数类型为:
如果我将param
更改为initializer_list
,它可以工作,但我稍后需要将其转换为param
。如果我使用make_pair
,它将返回另一个错误。
那么我该如何解决这个问题呢?
我目前正在使用GCC 11.0和VSCode。
unordered_map
的值类型是std::variant<int, float>
,但在大括号init列表中,您传递的是float
而不是double
。不允许从float
转换为variant
。
将值类型更改为std::variant<int, double>
,或者传递float
类型的文字,例如1.5f
而不是1.5
。
代码中最小化的问题是
std::variant<int, float> v = 1.5f; // ok
std::variant<int, double> v = 1.5; // ok
std::variant<int, float> v = 1.5; // error