2014-04-09 131 views
0

我在C++中有一個枚舉類型,我試圖編寫一個子程序,它將返回該集合中的下一個值。以下是我有:C++中的枚舉類型幫助

enum ChineseZodiacSign { Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Sheep, Monkey, Rooster, Dog, Pig }; 

ChineseZodiacSign nextSign(ChineseZodiacSign cz) 
{ if (cz%12==1) 
     cz=cz+1 
} 

我知道在枚舉的每個值索引從0開始,但我不知道該如何去了解這一點。任何幫助將不勝感激。

回答

1

你可以把它轉換爲一個整數,進行運算,然後將它轉換回

ChineseZodiacSign nextSign(ChineseZodiacSign cz) 
{ 
    int val = static_cast<int>(cz); 
    val++; 
    val = val % 12; 
    return static_cast<ChineseZodiacSign>(val); 
} 

就可以了,當然,全部寫在一個聲明,但我把它分開了可讀性。

+0

我仍然會使用if語句嗎?如果是這樣,我將如何插入它? –

+0

我不確定你的if語句是什麼意思 - 它現在說「如果符號是Ox,加一個」,這是沒有意義的。如果您只想返回下一個符號,則不需要if語句。模數('%')操作確保數字保持在0-11範圍內。 –

+0

所以即使一旦達到最後它會重新開始? –

0

枚舉類型不能轉換爲int類型。您的代碼行如下:

ChineseZodiacSign nextSign(ChineseZodiacSign cz) 
{ if (cz%12==1) 
    cz=cz+1 
} 

假定enum類型是int並且一旦程序傳遞給編譯器就會崩潰。

Dark在說明enum類型需要轉換爲int類型然後作爲枚舉類型返回時是正確的。

對不起,如果我做了不正確的事情發佈時,這是我第一次。