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