使用匿名联合为struct创建空的构造函数

时间:2019-06-24 17:37:32

标签: c++ struct union

尝试为具有联合作为成员变量的结构创建空构造函数。 Union还具有一个结构和一个附加变量作为成员变量。

采取了几种方法,但没有成功。如何为嵌套的匿名结构创建一个空的构造函数?之后如何调用成员变量?

typedef struct test_struct
{
   int a;
   union {
      int b;
      struct {
         int c;  
      };  
    };
 } test_struct; 

以下将无法编译

 test_struct() : a(10), b(20), c(30) {
 }   

下面将b和c都设置为30

test_struct() : a(10), b(20) {
   c = 30;
 }  

这是打印功能

int main(void)
{  
   test_struct *ts = new test_struct();
   printf("%i\n%i\n%i\n", ts->a, ts->b, ts->c);
   return 0;
}

我试图创建一个空的构造函数,该构造函数将使用我的printf()打印10 20 30。

编辑:我收到了有关如何无法以这种方式初始化联合的评论。但是,我收到的头文件(我根本无法更改)具有在这种嵌套结构中定义的结构。我不知道初始化如何进行,但是我的代码必须打印出所有成员变量的值。 (以下示例代码为a,b和c)。我可以采取任何方法/阅读来实现这一目标?

1 个答案:

答案 0 :(得分:0)

除了错误地使用并集之外,让我们继续关注关于嵌套结构的问题。答案很简单:您不能为嵌套结构指定构造函数。因此,即使您修复了代码并正确使用了嵌套结构,也将无法为该匿名类/结构声明构造函数或析构函数,因为构造函数和析构函数名称必须与类名匹配。 在您发布的示例中,匿名类是本地的。这意味着它没有链接,因此甚至不会创建名称混乱的名称。