![](/img/trans.png)
[英]Initialize a container inside a class/struct with std::initializer_list
[英]How do I use std::initializer_list to initialize a struct?
所以我有一个结构
struct live_set_item
{
uint32_t data_0;
uint64_t data_1;
uint64_t data_2;
live_set_item(uint32_t data_0_, uint32_t data_1_, uint64_t data_2_)
: data_0(data_0_), data_1(data_1_), data_2(data_2_)
{}
};
我想用这样的初始化列表进行初始化
void foo()
{
struct live_set_item obj;
get_new_lsi(&obj);
if (failed_to_initialize(obj)) {
obj = {
.data_0 = 2000,
.data_1 = 2001,
.data_2 = 2002
};
}
}
但我不断从 Clang 收到这个错误
test.cpp:339:21: error: no viable overloaded '='
obj = {
~~~ ^ ~
test.cpp:175:16: note: candidate function (the implicit copy assignment operator) not
viable: cannot convert initializer list argument to 'const live_set_item'
struct live_set_item
^
所以我发现了这个问题并尝试了
void operator=(const std::initializer_list<live_set_item>&) {}
但是现在它告诉我移动赋值运算符无效? 我的第一个论点是无效的?
test.cpp:175:16: note: candidate function (the implicit move assignment operator) not
viable: cannot convert initializer list argument to 'live_set_item'
test.cpp:204:22: note: candidate
function not viable: cannot convert argument of incomplete type 'void' to
'live_set_item' for 1st argument
void operator=(const std::initializer_list<au_live_set_item_v1>&) {}
^
这就是我迷失的地方,我尝试通过几种不同的方式更改赋值运算符,以查看 std::initializer 列表的 cpp 文档。 什么都没有。 有人能告诉我我做错了什么吗?
那不是您要在那里使用的initializer_list
; 它是 GCC指定的初始化程序,无论您多么努力,都无法在标准 C++ 中使用它。
此外,您正在尝试分配,而不是初始化(尽管如果您摆脱.data_0 =
东西,复制分配可能就足够了)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.