c++ - C++中的初始化列表名称冲突

标签 c++ initializer-list

我对类内部的 union 和此类构造函数的参数使用相同的限定符,如下所示:

class A
{
    union 
    {
        C y;
        D z;
    }
    x;
public:
    A(B x);
}

我想用y的构造函数C(B q);

我试过这个:

A(B x)
    :   x.y(x)
{
}

但在这种情况下,编译器(或至少是 IDE,在这种情况下为 VS15)似乎无法智能地处理名称冲突,如果情况更简单(即类似 x(x) 的东西) .

我不得不求助于:

A(B x)
{
    this->x.y = x;
}

当尝试在初始化列表中使用此指针时,出现错误“需要一个标识符”。

有什么办法可以实现初始化列表中这一行的效果吗?

最佳答案

你需要给你的 union 一个构造函数,因此也是一个名字:

class A
{
    union X
    {
        C y;
        D z;

        X(B b) : y(b) {}

        // other operations
    };

    X x;

public:
    A(B b) : x(b) {}
};

关于c++ - C++中的初始化列表名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41657082/

相关文章:

c++ - 以列表作为值初始化 map

c++ - 写入变量文件名

c++ - Windows 10 上的 CMake + MinGW + Clang

c++ 相同的代码从不在 Visual Studio 中编译/运行,有时在 Qt Creator 中编译/运行

C++ 编译器错误(试图创建 vector 的静态 vector )

c++ - 如何在不显式调用显式构造函数的情况下初始化映射?

c++ - 我的 Linux 开发项目的 Clang vs GCC

c++ - 在可变数据结构中初始化共享指针 vector

c++ - std::initializer_list 的底层结构是什么?

c++ - 是否可以避免初始化列表中的 static_cast ?