使用 C++11 编译以下代码:
class CoolData {
public:
typedef union {
char char_t;
int int_t;
} event_data_t;
CoolData() : _event_data(static_cast<event_data_t>(0)) {}
private:
event_data_t _event_data;
};
int main()
{
return 0;
}
我得到以下编译错误:
prog.cpp: In constructor 'CoolData::CoolData()': prog.cpp:8:54: error: no matching function for call to 'CoolData::event_data_t::event_data_t(int)'
CoolData() : _event_data(static_cast<event_data_t>(0)) {}
^
prog.cpp:6:4: note: candidate: CoolData::event_data_t::event_data_t() } event_data_t;
^
prog.cpp:6:4: note: candidate expects 0 arguments, 1 provided
prog.cpp:6:4: note: candidate: constexpr CoolData::event_data_t::event_data_t(const CoolData::event_data_t&)
prog.cpp:6:4: note: no known conversion for argument 1 from 'int' to 'const CoolData::event_data_t&'
prog.cpp:6:4: note: candidate: constexpr CoolData::event_data_t::event_data_t(CoolData::event_data_t&&)
prog.cpp:6:4: note: no known conversion for argument 1 from 'int' to 'CoolData::event_data_t&&'
我只想在初始化列表中用整数初始值初始化 _event_data
。
我该怎么做?
最佳答案
有多种选择可供选择。
您可以这样做:
CoolData() { _event_data.int_t = 0; }
或者这个:
class CoolData {
public:
using event_data_t = union U {
U() { int_t = 0; }
char char_t;
int int_t;
};
CoolData() { }
private:
event_data_t _event_data;
};
甚至这样:
class CoolData {
public:
using event_data_t = union U {
U(int v) { int_t = v; }
char char_t;
int int_t;
};
CoolData(): _event_data{0} { }
private:
event_data_t _event_data;
};
我怀疑最后一个就是你要找的那个。
关于c++ - union 类型数据成员的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910663/