C2621:非法工会成员.(c++)
C2621: illegal union member. (c++)
我使用Visual Studio,注意到不支持不受限制的联合。我已经提出了一个vec4结构,基本上是这样的:
template<class T>
struct vec4
{
T x, y, z, w;
vec4() :x(0), y(0), z(0), w(0) {}
vec4(T x, T y, T z, T w) :x(x), y(y), z(z), w(w) {}
vec4(const vec4& v) :x(v.x), y(v.y), z(v.z), w(v.w) {}
};
重点是我不想写vec2i(整数)vec2d(双)ect。。。分别地然后我做了一个4乘4的矩阵:
template<class T>
struct mat4
{
T elements[16];
mat4()
{
for (int i = 0; i < 4 * 4; i++)
{
elements[i] = 0;
}
}
};
同样,重点是我不想写所有单独的类型。我想以vec4s的形式访问矩阵列。但如果我这样做:
union
{
T elements[16];
vec4<T> columns[4];
};
我得到C2621。据我所知,我可以在GCC中做到这一点,但我希望避免切换我的开发环境。有解决办法吗?
编辑:我试过这样的把戏:
vec4<T> * column(int col)
{
return ((vec4<T>*) (((vec4<T>*)elements) + (sizeof(vec4<T>) * col)));
}
然而,这似乎给了我一个糟糕的结果。
https://msdn.microsoft.com/en-us/library/bd149yt8.aspx?f=255&MSPP错误=-2147217396
联盟成员有一个非平凡的复制构造函数
具有非平凡构造函数(12.1)的类的对象复制构造函数(12.8)、非平凡析构函数(12.4)或非平凡复制赋值运算符(13.5.3、12.8)不能是并集的成员,这类对象的数组也不能。
在"structvec4"中重新移动复制ctor怎么样?
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 多成员Constexpr结构初始化
- 我们可以访问一个不存在的联盟的成员吗