即使我使用 -std=c++11
标志编译,GCC 也会提示这段代码,而且我的 gcc 版本应该支持无限制 union (>4.6)。
union
{
struct
{
float4 I,J,K,T;
};
struct
{
float4 m_lines[4];
};
struct
{
float m16f[16];
};
struct
{
float m44f[4][4];
};
};
请注意,float4 有一个带 0 个参数的非默认构造函数。
class float4
{
public:
float4();
....
};
知道我能做什么吗?错误是:
<anonymous union>::<anonymous struct>::I’ with constructor not allowed in anonymous aggregate
最佳答案
这里的问题不是你的类 float4
有一个构造函数,使其成为 POD 的旧 C++03 定义下的非 POD。相反,问题在于您的 union 和 union 内的结构是匿名的。如果您只是简单地命名它们,它将起作用:
union u
{
struct s1
{
float4 I,J,K,T;
};
struct s2
{
float4 m_lines[4];
};
struct s3
{
float m16f[16];
};
struct s4
{
float m44f[4][4];
};
};
关于c++ - 带有构造函数的类的匿名 union/结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654751/