che sto cercando di creare un mazzo di carte da scorrere l'enumerazioni Suit
e Rank
(so che non c'è ottimo modo per iterare enumerazioni, ma non vedo un'alternativa). Ho fatto questo aggiungendo un enumeratore enum_count
alla fine di ogni enum, il cui valore è destinato a rappresentare la lunghezza e la fine della enum.Come utilizzare i valori della classe enum come parte del ciclo for?
#include <vector>
using namespace std;
enum class Suit: int {clubs, diamonds, hearts, spades, enum_count};
enum class Rank: int {one, two, three, four, five, six, seven, eight,
nine, ten, jack, queen, king, ace, enum_count};
struct Card {
Suit suit;
Rank rank;
};
class Deck{
vector<Card> cards{};
public:
Deck();
};
Deck::Deck() {
// ERROR ON THE BELOW LINE
for (Suit suit = Suit::clubs; suit < Suit::enum_count; suit++) {
for (Rank rank = Rank::one; rank < Rank::enum_count; rank++) {
Card created_card;
created_card.suit = suit;
created_card.rank = rank;
cards.push_back(created_card);
};
};
};
Tuttavia, quando provo a un loop all'interno di enum, il compilatore non piace che io sto cercando di incrementare il suit++
e rank++
nel ciclo for, affermando:
card.cpp|24|error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]|
card.cpp|25|error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]|
Qual è il modo migliore per creare un mazzo di carte senza buttare via le utili strutture di dati enum?
[Relativo?] (Http://stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum) –
@JamesRoot Ho provato a replicare molte delle soluzioni proposte in quella domanda (anche se la maggior parte delle risposte ci sono su enumerazioni inutilizzate) e altre che ho trovato su internet, ma senza risultato. Così ho postato qui il mio miglior tentativo. – DBedrenko
@NewWorld Ho chiesto [qualcosa di simile] (http://stackoverflow.com/questions/13971544/using-enum-in-loops-and-value-consistency) qualche tempo fa. –