当第一个struct有构造函数时,如何使第二个struct工作? 我收到错误:
error C2620: member 'test::teststruct::pos' of union 'test::teststruct::<unnamed-tag>' has user-defined constructor or non-trivial default constructor
代码:
struct xyz {
Uint8 x, y, z, w;
xyz(Uint8 x, Uint8 y, Uint8 z) : x(x), y(y), z(z) {}
};
struct teststruct {
union {
Uint32 value;
xyz pos; // error at this line.
};
};
我可以使用一个函数来初始化xyz结构,但它不会慢得多吗?更不用说:我有大量的结构我需要用init_xyz()等前缀创建自己的函数,这是不好的。有没有其他办法解决这个问题?
答案 0 :(得分:5)
可能要避免这种情况:
struct A {
Uint8 a;
A() : a(111) {}
};
struct B {
Uint8 b;
B() : b(2222) {}
};
struct teststruct {
union {
A aValue;
B bValue;
};
};
应该发生什么,A和B构造函数都会尝试以不同的方式初始化相同的内存。
可能更容易说用户定义的构造函数,而不是让某些规则说明哪些会获胜答案 1 :(得分:1)
来自C ++ 03,9.5 Unions,第162页
union可以具有成员函数(包括构造函数和析构函数),但不具有虚函数(10.3)。工会不得有基类。联合不应该用作基类。具有非平凡构造函数(12.1)的类的对象,非平凡的复制构造函数(12.8),非平凡的析构函数(12.4)或非平凡的复制赋值运算符(13.5.3,12.8)不能是联合的成员,也不能是这类对象的数组