具有构造函数的类的匿名联合/结构

时间:2012-03-11 12:04:41

标签: c++ gcc c++11 unions

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

2 个答案:

答案 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];
    };
};