c++ - 带有构造函数的类的匿名 union/结构

标签 c++ gcc c++11 unions

即使我使用 -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/

相关文章:

c++ - 如何在函数指针中模板化参数?

C++ randomizer - 第一个随机数总是 7 的一个因素

C++ ofstream System.AccessViolation

c++ - 使用 map 类型创建 gcc 错误 : expected unqualified-id before ‘for’

c++ - g++ 对 -Ofast 做了哪些额外的优化?

c++ - 通过常量迭代器从 STL 容器中删除

c++ - Opencv 异常 fillconvexppoly

c++ - Sscanf() 函数

c - 为什么直接比较两个枚举会出错?

c++ - 字符串的最小字典序值