在C ++中静态初始化匿名联合 [英] Statically initialize anonymous union in C++

查看:318
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆