无法使用初始值设定项列表初始化 const unordered_map<字符串、变体<int、浮点>>



因此函数如下:

void spawn(const param &para) {
// ...
}

paramtypedef 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&lt_键、_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

最新更新