Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何初始化枚举?_C_Function_Enums - Fatal编程技术网

C 如何初始化枚举?

C 如何初始化枚举?,c,function,enums,C,Function,Enums,当我编译类似的东西时,编译器会给我一个错误:函数“play”的隐式声明和警告:“menu”可能会在未初始化的情况下在此函数中使用。如何解决这些问题?正如您在上面所声明的,套装定义了一种类型,它只能包含红桃、黑桃、钻石和梅花中的一种。因此,当您将hand声明为Suit类型时,它可以接受您在枚举中定义的值 尝试将hand定义为卡类型: typedef enum { HEARTS = 0, SPADES, DIAMONDS, CLUBS }Suits; //her

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

正如您在上面所声明的,
套装定义了一种类型,它只能包含红桃、黑桃、钻石和梅花中的一种。因此,当您将
hand
声明为
Suit
类型时,它可以接受您在枚举中定义的值

尝试将
hand
定义为卡类型:

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(手牌)

可以将其类似于声明一个
int

hand = SPADES;
x
是整数类型,必须包含此类型定义的值。如果你调用一个函数

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

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

someFunc (x);

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

当编译器遇到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;
}
但是hand尚未初始化,因此编译器警告您,您提供给函数play的值未初始化

只需为hand设置一个值:


这并没有解决我的问题。我仍然收到相同的错误。错误与枚举无关,请参阅下面的ring0答案。这与枚举无关,请在抱怨之前搜索您的错误消息,并且“菜单”甚至没有出现在您的代码中,因此我不太清楚您希望我们如何处理它。
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;
Suits hand = SPADES;