struct data {
uint8_t nibble1 : 4,
nibble2 : 4;
constexpr data() {
nibble1 = 2;
nibble2 = 4;
}
};这就给出了GCC 9.2.0的两个编译错误:
error: member 'data::nibble1' must be initialized by mem-initializer in 'constexpr' constructor
error: member 'data::nibble2' must be initialized by mem-initializer in 'constexpr' constructor但我敢肯定我的构造师把他们两个都搞砸了。我看了一下https://en.cppreference.com/w/cpp/language/constexpr,没有看到任何我的constexpr构造函数不满足的要求。
我怎样才能消除这个错误?
发布于 2019-12-30 15:18:16
您需要使用成员初始化列表初始化成员。
constexpr data() : nibble1(2), nibble2(4) { }链接的页面显示了对constexpr构造函数的下列要求:
但这一点:
nibble1 = 2;...is不是nibble1的初始化,而是赋值。初始化成员变量的唯一方法是使用成员初始化程序列表或默认它们(我认为,在C++20之前,这对于位字段是不可能的)。
https://stackoverflow.com/questions/59532991
复制相似问题