gpt4 book ai didi

c++ - C2621 : illegal union member. (C++)

转载 作者:行者123 更新时间:2023-11-30 05:45:11 26 4
gpt4 key购买 nike

我使用 Visual Studio,我注意到不支持不受限制的 union 。我写了一个 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( double )等...。然后我制作了一个 4 x 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&MSPPError=-2147217396

Union member has a non-trivial copy constructor

具有非平凡构造函数 (12.1) 的类的对象,非平凡的复制构造函数 (12.8)、非平凡的析构函数 (12.4) 或非平凡的复制赋值运算符 (13.5.3、12.8) 不能是 union 的成员,也不能是此类对象的数组。

如何在“struct vec4”中 revmoving 复制构造函数?

关于c++ - C2621 : illegal union member. (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com