gpt4 book ai didi

c - 使用 union 时将标签字段值分配给结构

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:54 24 4
gpt4 key购买 nike

我正在尝试使用 Horowitz、Sahni 和 Anderson-Freed 合着的“C 数据结构基础”来学习 C 语言。在关于结构和 union 的部分,有一个练习题,我必须创建一个包含 union 的结构,以根据每个结构的值包含附加信息。

代码如下:

/*
Modify the humanBeing structure so that we can include different information
based on marital status. Marital status should be an enumberated type with field
single, married, widowed, divorced. Use a union to include different information
based on marital status as follows:
- single. no information needed.
- married. include a marriage date field.
- widowed. include marriage date and death of spouse date fields.
- divorced. include divorce date and number of divorces fields.

Assign values to the fields for some person fo type humanBeing.
*/

#include <stdio.h>
#include <string.h>

typedef struct date {
int year;
int month;
int date;
};

typedef struct wInfo {
date dMarriage;
date dDeath;
};

typedef struct dInfo {
date dDivorce;
int nDivorce;
};

typedef struct mType {
enum tagField { single, married, widowed, divorced } maritalStatus;
union {
date dMarriage;
wInfo death;
dInfo divorce;
} u;
};

typedef struct humanBeing {
char name[10];
int age;
float salary;
mType maritalInfo;
};

void main() {
humanBeing person1;

strcpy(person1.name, "Phil");
person1.age = 20;
person1.salary = 4800;
person1.maritalInfo.maritalStatus = married;
person1.maritalInfo.u.dMarriage.year = 1991;
person1.maritalInfo.u.dMarriage.month = 6;
person1.maritalInfo.u.dMarriage.date = 10;
}

我的错误发生在:

person1.maritalInfo.maritalStatus = married;

“已婚”有一个错误,内容为:标识符“已婚”未被识别。

可是我在创建mType的时候不是识别出来了吗?

我在网上找到了解决教材中所有问题的方法。我将我的代码与解决方案进行了比较。我看不出我在做什么不同,所以我将解决方案的代码复制并粘贴到我的 Visual Studio ,但出现了同样的错误。这让我觉得我的 Visual Studio 设置可能有问题。但是报错明明是语法错误?

我确定我犯了一个愚蠢的错误,但是你们能帮忙吗?谢谢。

最佳答案

假设 C 不是您可能与 VS 一起使用的 C++:

此外,那些 typedef 是无用的,因为它们不是 typedef 的任何东西。

让他们定义一个类型:

typedef struct mType {
enum tagField { single, married, widowed, divorced } maritalStatus;
union {
date dMarriage;
wInfo death;
dInfo divorce;
} u;
} mType;

对所有其他 typedef 也这样做。


同时 main() 被定义为返回 int,所以它必须是

int main(void);

至少。

关于c - 使用 union 时将标签字段值分配给结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32022536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com