如何使用联合在1 C数组中存储2个不同的结构
我想创建一个数组来存储两种类型的C结构-如何使用联合在1 C数组中存储2个不同的结构,c,struct,C,Struct,我想创建一个数组来存储两种类型的C结构-Employee,以及它的“子对象”Manager。我创建了一个unionPerson来容纳他们中的任何一个,然后尝试用它创建一个数组,但它不起作用。我怎样才能让这样一个数组工作?相关代码如下 typedef struct { char name[20]; double salary; } Employee; //Manager struct inheriting from employee struct typede
Employee
,以及它的“子对象”Manager
。我创建了一个unionPerson
来容纳他们中的任何一个,然后尝试用它创建一个数组,但它不起作用。我怎样才能让这样一个数组工作?相关代码如下
typedef struct {
char name[20];
double salary;
} Employee;
//Manager struct inheriting from employee struct
typedef struct {
Employee employee;
int bonus;
} Manager;
typedef union{
Employee e;
Manager m;
} Person;
Manager boss;
Employee harry ;
Employee tommy;
Person staff[];
int main(void)
{
...
boss = newManager(...);
harry = newEmployee(...);
tommy = newEmployee(...);
我没能让下一行工作,我尝试了很多东西
staff[3] = {boss, harry, tommy};
尝试:
或者可能:
Person staff [] = {
{.manager = boss},
{.employee = harry},
/* ... */
};
但是问问你自己:你以后怎么知道
员工[x]
是经理还是员工?从技术上讲,你的工会是不必要的,因为经理包含一个“员工”作为第一个成员,任何经理实例都可以作为员工访问。但是,这不会使代码变得非常干净:)谢谢,staff[0].m=boss代码>能够编译。我以前也试过类似的方法,但我想当时出现了不同的问题。
Person staff [] = {
{.manager = boss},
{.employee = harry},
/* ... */
};