2013-03-17 81 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不知道什麼是「玩」是指自定義來之後。