Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用匿名联合为结构创建空构造函数_C++_Struct_Unions - Fatal编程技术网

C++ 使用匿名联合为结构创建空构造函数

C++ 使用匿名联合为结构创建空构造函数,c++,struct,unions,C++,Struct,Unions,尝试为具有union作为成员变量的结构创建空构造函数。Union还有一个结构和一个附加变量作为成员变量 采取了一些方法,但没有成功。如何为嵌套匿名结构创建空构造函数?之后如何调用成员变量 typedef struct test_struct { int a; union { int b; struct { int c; }; }; } test_struct; 下面不会编译 test_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


编辑:我收到了关于我如何不能以这种方式初始化union的评论。但是,我收到的头文件(我根本无法更改)在这种嵌套结构中定义了结构。我不知道后面的初始化是如何进行的,但我的代码必须打印出所有成员变量的值。(以下示例代码为a、b和c)。我能做些什么来实现这一点呢?

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

您是否理解为什么初始化
b
c
都没有意义?您希望如何包含同时包含两个不同值的联合?您可能不理解功能实际上是什么。StEnoTo: C++不允许匿名<代码>结构> <代码>。您可能正在使用允许扩展的编译器,但要知道您的可移植性将受到限制。推荐阅读:您好,谢谢您的回复。但是,我收到的头文件(我根本无法更改)具有以这种嵌套方式定义的结构。我不知道后面的初始化是如何进行的,但我的代码必须打印出所有成员变量的值。(以上示例代码为a、b和c)。我能做些什么来实现这一点?@Anaguone如果你不能更改头文件,你为什么要向它添加构造函数?我试图以同样的方式创建自己的结构,用空构造函数初始化它,然后编写一个代码来读取所有成员变量。这个结构是否意味着b和c在任何时候都必须有相等的值?@Anaguone,你不能
union
s是一个变量,具有多个可能的类型,所有类型都占用相同的空间。由于
b
c
占用相同的空间,因此设置
c
将覆盖
b
。设置
c
后访问
b
的行为未定义。