2010-05-31 14 views
7

संभावित डुप्लिकेट:
Enumerate over an enum in C++
C++: Iterate through an enumसी ++ enum

मैं निम्नलिखित enums के साथ एक ब्लैकजैक खेल के लिए एक कार्ड वर्ग है है:

enum Rank { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King }; 
enum Suit { Clubs, Diamonds, Hearts, Spades }; 

जब मैं डेक बनाता हूं तो मैं सी लिखना चाहता हूं इस तरह ओडी:

// foreach Suit in Card::Suit 
// foreach Rank in Card::Rank 
//  add new card(rank, suit) to deck 

मेरा मानना ​​है कि सी ++ में कोई फोरच नहीं है। हालांकि, मैं एक enum कैसे पार करते हैं?

धन्यवाद, स्पेंसर

+0

इस संबंधित सवाल देखें:

enum Rank { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, RankFirst = Ace, RankLast = King }; enum Suit { Clubs, Diamonds, Hearts, Spades, SuitFirst = Clubs, SuitLast = Spades }; 

तो फिर तुम के रूप में अपने छोरों लिख सकते हैं : http://stackoverflow.com/questions/1390703/enumerate-over-an-enum-in-c – Alan

+2

@Alan यह मेरे लिए एक सटीक डुप्लिकेट जैसा दिखता है –

उत्तर

19

यह enum के तत्वों को जोड़ने के लिए आम है इस सुविधा के लिए:

for (int r = RankFirst; r <= RankLast; ++r) { 
    for (int s = SuitFirst; s <= SuitLast; ++s) { 
     deck.add(Card((Rank)r, (Suit)s)); 
    } 
} 
+0

मैंने कोशिश की और एक त्रुटि मिली। यहाँ है कि मैं क्या काम कर रहा है: (; सूट <= कार्ड :: हुकुम, सूट ++ पूर्णांक सूट = कार्ड :: क्लब) \t \t के लिए (int रैंक = कार्ड :: ऐस; के लिए रैंक <= कार्ड :: राजा; रैंक ++) \t \t \t कार्ड.push (कार्ड (कार्ड :: रैंक (रैंक), कार्ड :: सूट (सूट))); – Spencer

+0

आप सही हैं - बिस्तर पर जाने से पहले मुझे SO प्रश्नों का उत्तर देने के लिए यही मिलता है। मैंने कोड को अब कुछ संकलित किया है जो अब संकलित करता है। यदि आप "डुप्लिकेट" के लिंक का पालन करते हैं, तो आपको कई और विदेशी समाधान मिलेंगे जो आपको Enum को ++ लागू करने में सक्षम बनाती हैं। वे अधिक प्रकार की सुरक्षा प्रदान करते हैं (कोई जानवर नहीं)। हालांकि, यहां प्रदान किया गया सरल समाधान मैंने कई उत्पादन सी ​​++ कोड में देखा है। – MtnViewMark