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

initialization list name conflict in c++

本文关键字:冲突 列表 初始化 C++      更新时间:2023-10-16

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

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;
}

尝试在初始值设定项列表中使用此指针时,出现错误"预期标识符"。

有没有办法在初始化列表中实现这一行的效果?

你需要给你的联合一个构造函数,因此也需要一个名称:

class A
{
    union X
    {
        C y;
        D z;
        X(B b) : y(b) {}
        // other operations
    };
    X x;
public:
    A(B b) : x(b) {}
};