C++ 使用匿名联合为结构创建空构造函数
尝试为具有union作为成员变量的结构创建空构造函数。Union还有一个结构和一个附加变量作为成员变量 采取了一些方法,但没有成功。如何为嵌套匿名结构创建空构造函数?之后如何调用成员变量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() :
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
都没有意义?您希望如何包含同时包含两个不同值的联合?您可能不理解union
s是一个变量,具有多个可能的类型,所有类型都占用相同的空间。由于b
和c
占用相同的空间,因此设置c
将覆盖b
。设置c
后访问b
的行为未定义。