【问题标题】:how to assign enum to enum variable如何将枚举分配给枚举变量
【发布时间】:2014-09-20 19:29:57
【问题描述】:

我在 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)

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

【问题讨论】:

  • lint 不是编译器。只需构建程序 - 就可以了。
  • 是的,但这是一个 lint 错误,我该如何删除它?
  • 因此,您需要找到一种方法来禁用某些 lint 错误,可能是完全禁用它,而不是修复程序。提供一些有关您的工作环境的信息。
  • 可能是演员表? info.weekday = (工作日) data.weekday;
  • 你使用的是什么版本的 lint?

标签: c enums lint


【解决方案1】:

这里用逗号替换分号:

MONDAY = 0;

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

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

看来 lint 有点太偏执了。这样的分配不可能出错。因此,正如 AnthonyLambert 所说,只需禁用此错误(或不使用 lint ?)。

我能想到的最后一个技巧,但我不会打赌,就是给你的枚举命名:

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

我也不推荐的最后一个选项是在结构中使用 int :

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

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

【讨论】:

  • 是的,是错字,原码是MONDAY = 0,
  • 如果编译的话会有点奇怪。
  • C/C++ (Unix) 版本。 9.00j
  • 已编辑。我个人建议不要使用 lint,但是,我不知道你需要什么,所以我不会强迫你做任何事情。如果您需要 lint,只需禁用烦人的错误即可。
【解决方案2】:

您的代码没有错误,它只是指出了一个潜在的错误。如果使用保留类型信息的 C++ 编译器进行编译,则不会出现此错误。

问题在于,在 C 中,一旦你分配了一个枚举值,它就会变成一个 int 类型。 因此,一旦您从 Weekday 读取它的类型现在是 int 而不是 Weekday。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2021-10-21
    • 2016-04-09
    相关资源
    最近更新 更多