【发布时间】:2019-04-16 15:22:54
【问题描述】:
所以我有一个结构
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
^
所以我找到了this question 并尝试了一下
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>&) {}
^
这就是我迷失的地方,我尝试以几种不同的方式更改赋值运算符,查看 cpp 文档中的 std::initializer 列表。没有什么是坚持。谁能告诉我我做错了什么?
【问题讨论】:
-
为什么需要构造函数?
标签: c++ c++11 constructor clang