繁体   English   中英

如何为枚举变量赋予枚举

[英]how to assign enum to enum variable

我在C中有以下代码:

typedef enum
{
   MONDAY = 0,
   TUESDAY,
   WEDNESDAY
} Weekday;

typedef struct
{
   int age;
   int number;
   Weekday weekday;
} Info;

typedef struct
{
   int age;
   Weekday weekday;
} Data;

Info info;
Data data;
info.weekday = data.weekday;

lint给出以下错误:

info.weekday = data.weekday; Type mismatch (assignment) (enum/enum)

如何将枚举分配给另一个枚举变量?

在这里用逗号替换分号:

MONDAY = 0;

如果仍有错误,则需要显示更多代码。

编辑:我的错,不知道“lint”。

似乎皮棉有点过于偏执。 这种任务不可能出错。 所以AnthonyLambert说,只是禁用此错误(或不使用lint?)。

我能想到的最后一招,但我不打赌,就是命名你的枚举:

typedef enum Weekday
{
    //...
} Weekday;

您拥有的最后一个选项(我不建议使用)是在结构中使用int:

typedef struct
{
    // ...
    int weekday;
} Info;

然后,您可以为这些变量分配枚举器。

你的代码不正确,只是lint指出了潜在的错误。 如果使用C ++编译器编译,它将保留类型信息,则不会显示此错误。

问题是,只要你分配一个枚举值,就会在C中变成一个int类型。 所以,一旦你从工作日读到它的类型现在是int而不是工作日。

通过编码来解决在lint中报告的错误的方法是强制它再次从枚举中分配。

void SetWeekday( Info *info, Data* data )
{
     switch (Data->Weekday)
     {
         case MONDAY: info->Weekday = MONDAY;
         case TUESDAY: info->Weekday = TUESDAY;
         etc...
     }
}

或者lint允许您单独禁用每个错误,可能是最好的。

(此代码尚未编译,可能包含坚果和/或小昆虫等。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM