GCC抱怨这段代码,即使我使用-std=c++11
标志编译,我的gcc版本据称支持Unrestricted unions(> 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
答案 0 :(得分:1)
这里的问题不在于你的类float4
有一个构造函数,使它在POD的旧C ++ 03定义下成为非POD。相反,问题在于你的工会和工会中的结构是匿名的。如果您只是命名它们,它将起作用:
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];
};
};
答案 1 :(得分:-2)
union // This do not need named, it will same to MSVC10 or XCode
{
struct s1
{
float4 I,J,K,T;
};
struct s2
{
float4 m_lines[4];
};
struct s3
{
float m16f[16];
};
struct s4
{
float m44f[4][4];
};
};