【问题标题】:How to initialize an enum? [closed]如何初始化一个枚举? [关闭]
【发布时间】:2013-03-05 14:16:31
【问题描述】:
typedef enum
{
    HEARTS = 0, 
    SPADES, 
    DIAMONDS, 
    CLUBS
}Suits; //here HEARTS = 0, SPADES = 1, DIAMONDS = 2, and CLUBS = 3  

int main()
{
    Suits hand;
    play(hand);
    return 0;
}

void play(Suits hand)
{
    printf("Testing.\n");
}

当我编译类似的东西时,编译器给我错误:函数“play”的隐式声明和警告:“menu”可能在此函数中未初始化。我该如何解决这些问题?

【问题讨论】:

  • 这并没有解决我的问题。我仍然遇到同样的错误。
  • 报错与枚举无关,见下面的ring0答案
  • 这与枚举无关,请在向 SO 抱怨之前搜索您的错误消息,并且“菜单”甚至没有出现在您的代码中,所以我不太了解您期待我们这样做。

标签: c function enums


【解决方案1】:

当编译器遇到对 play 的调用时,它还不知道该函数,因为它是在下面声明的。因此发出警告。只需将声明移到 main

之前
typedef enum{HEARTS = 0, SPADES, DIAMONDS, CLUBS}Suits; //here HEARTS = 0, SPADES = 1, DIAMONDS = 2, and CLUBS = 3  

void play(Suits hand)
{
  printf("Testing.\n");
}

int main()
{
  Suits hand;
  play(hand);
  return 0;
}

要删除第二个警告,您声明

Suits hand;

hand 尚未初始化,因此编译器会警告您提供给函数 play 的值尚未初始化。

只需为 hand 设置一个值:

Suits hand = SPADES;

【讨论】:

    【解决方案2】:

    正如您在上面声明的那样,Suits 定义了一个只能包含 HEARTS、SPADES、DIAMONDS、CLUBS 之一的类型。因此,当您将 hand 声明为 Suit 类型时,它可以采用您在枚举中定义的值。

    尝试将hand 定义为卡片类型:

    hand = SPADES;
    

    然后调用 play(hand)。

    将其视为类似于声明int

    int x;
    

    x 是整数类型,必须包含由该类型定义的值。如果你调用一个函数

    someFunc (x);
    

    如果不初始化 x,您将获得未定义的行为。

    编辑: 另外,将play 函数的定义放在main 上方(在枚举定义之后)。要么,要么你需要在main上面声明你的函数:

    void play(Suits hand);
    

    否则,main 不知道“玩”指的是什么,因为定义在它之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      相关资源
      最近更新 更多