2013-03-17 59 views
2
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'可能在这个函数中未初始化。我如何解决这些问题?如何初始化一个枚举?

+0

http://stackoverflow.com/questions/1102542/how-to-define-an-enumerated-type-enum-in-c – 2013-03-17 01:19:06

+0

这没有解决我的问题。我仍然遇到同样的错误。 – Bonnie 2013-03-17 01:24:30

+2

该错误与枚举无关,请参阅下面的ring0回答 – 2013-03-17 01:32:30

回答

3

当编译器遇到的调用玩它不知道那个函数,因为它在下面被声明。因此警告。就在主要

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; 
0

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

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

hand = SPADES; 

然后调用播放(手)。

想想它,同样声明int

int x; 

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

someFunc (x); 

没有intializing x,你会得到未定义的行为。

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

void play(Suits hand); 

否则,main不知道什么是“玩”是指自定义来之后。