我对类内部的 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/