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