【问题标题】:how to assign a value to a enum in C?如何为C中的枚举赋值?
【发布时间】:2012-11-10 16:36:48
【问题描述】:

我有一个 enum 和一个 struct 定义如下:

typedef enum
{
   MONDAY = 1,
   TUESDAY,
   WEDNESDAY
} ThreeDays;

typedef struct
{
   int hello;
   ThreeDays day;
} Weekday;

static Weekday weekday = { 1, 2};

然后我在 lint 中收到以下错误:

Error 64: Type mismatch (initialization) (int/enum)

这个错误的原因是什么?我该如何纠正?

【问题讨论】:

  • 你试过static Weekday weekday = {1, MONDAY};吗?
  • 我在 c 中得到了这个警告,而不是在 c++ 中,这不是错误。
  • @ratzip 那你的C编译器不对,你用的是哪个编译器?
  • 不是编译器,是lint
  • 你知道你为什么定义enum吗?

标签: c struct enums lint


【解决方案1】:

将您的枚举用于它的构建目的:

static Weekday weekday = {1,TUESDAY};

Lint 抱怨是因为您有一个枚举,但既没有从枚举中传递符号,也没有传递兼容类型的强制转换(例如 (ThreeDays)2)。

逐字使用枚举符号来避免来自 Lint 的警告。

【讨论】:

    【解决方案2】:

    从我使用的枚举来看,你并不真的想做你正在尝试的事情。它的全部意义在于将其视为一种类型。我所说的类型是指某种类型的值的顺序,这些值仅用整数的值表示。整数只是区分不同类型的简单方法。

    例如,您可以在一周中的几天使用它们

        Enum{
             monday,tuesday, ....
    }
    

    通常当我使用它时,它是命名我在节点集合中使用的结构,以便区分我的节点。

    将您的枚举设置为特定数字有点违背目的。对于看起来你想要一个最终变量,因为你想在你想要的时候引用它。因此,只需创建一个最终 int 即可获得该值。

    【讨论】:

      【解决方案3】:

      使用文本命名而不是数字:

      use static Weekday weekday = { Mon , Tue , ... } ;
      

      【讨论】:

      • 这没有任何意义。 Weekday 有一个名为 hello 的第一个字段,它是 int,而不是枚举。
      【解决方案4】:

      代码中枚举的拼写不正确。

      typedef enum { MONDAY = 1, TUESDAY, WENDESDAY }three; 工作:)

      【讨论】:

        猜你喜欢
        • 2012-08-31
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多