联合类型的数据成员的初始化
Initialization of a data member of union type
使用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++静态数据成员初始化
- 使用初始化列表时的 C++ 数据成员初始化顺序
- Cocos2d-x AppDelegate数据成员初始化丢失
- 基类构造函数和数据成员初始化的奇怪行为
- Visual Studio 2013 因非静态数据成员初始化而崩溃
- std::vector的非静态数据成员初始化器/调用构造函数
- GCC 默认 int 数据成员初始化
- 何时在C++中使用哪个数据成员初始化
- Clang++ 非静态数据成员初始化错误?C++11.
- C++11;非静态数据成员初始化是否可以访问其他数据成员
- 类C++的静态函数成员中的静态数据成员初始化顺序
- C++警告非静态数据成员初始化程序
- 抱歉,未实现:c++ 11中的非静态数据成员初始化器
- c++ RPG错误:不允许使用数据成员初始化式
- 静态数据成员初始化顺序
- 在c++ 0x中,非静态数据成员初始化式是否覆盖隐式复制构造函数?