在C ++中静态初始化匿名联合 [英] Statically initialize anonymous union in C++
本文介绍了在C ++中静态初始化匿名联合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在Visual Studio 2010中静态初始化以下结构:
I am trying to statically initialize the following structure in Visual Studio 2010:
struct Data
{
int x;
union
{
const Data* data;
struct {int x; int y; };
};
};
以下是失败与错误C2440:'initializing':无法转换'data *'to'char'
。
static Data d1;
static Data d = {1, &d1};
static Data d2 = {1, {1, 2}};
我找到了一些方法的引用,这可以正确初始化,但没有一个在VS2010工作。任何想法?
I have found references to some ways this can be initialized properly but none of them work in VS2010. Any ideas?
推荐答案
你能通过定义重载的构造函数来实现吗?未验证的代码:
Can you do it by defining overloaded constructors? Untested code ahead:
struct Data
{
int x;
union
{
const Data* data;
struct {int a; int b; } z;
} y;
Data()
{
x = 0;
y.data = 0;
y.z.a = 0;
y.z.b = 0;
}
Data(int x_, Data* data_)
{
x = x_;
y.data = data_;
}
Data(int x_, int a_, int b_)
{
x = x_;
y.z.a = a_;
y.z.b = b_;
}
};
static Data d1;
static Data d(1, &d1);
static Data d2(1, 1, 2);
这篇关于在C ++中静态初始化匿名联合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文