我为类内的联合和此类构造函数的参数使用相同的限定符,如下所示:
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) {}
};