struct Dingus {
union {
int dingly[4 *4];
vec3 dinglyDo;
}diddly;
inline Dingus() {}
};
此代码产生错误
error C2280: 'Dingus::<unnamed-type-diddly>::<unnamed-type-diddly>(void)': attempting to reference a deleted function
奇怪的是,当我删除提供引用的“diddly”时,没有错误。
vec3是一个来自GLM库的结构,我可以用其他类替换类型,我会得到相同的错误......但如果我用像float这样的简单替换它我不会得到错误
由于删除“diddly”会删除错误,这似乎与此问题不同one
答案 0 :(得分:3)
您已声明该匿名联合类型的成员,因此需要在Dingus
构造函数中初始化该成员。由于union具有非平凡类型的成员,因此它没有默认构造函数,因此无法在Dingus
构造函数中初始化它。
您可以为联合类型定义一个构造函数,该构造函数说明默认构造时应该发生的情况,例如。
struct Dingus {
union U {
int dingly[4 *4];
vec3 dinglyDo;
U() : dingly() { }
} diddly;
inline Dingus() {}
};
答案 1 :(得分:0)
从c++17
开始,您可以使用std::variant
代替联合来解决此问题。您的代码很容易被替换为:
struct Dingus {
std::variant<std::array<int, 4*4>, vec3> diddly;
inline Dingus() {}
};