Tôi đang cố gắng tạo một cỗ bài bằng cách lặp lại các enums Suit
và Rank
(Tôi biết không có cách nào tuyệt vời để lặp lại các enums nhưng tôi không thấy thay thế). Tôi đã làm điều này bằng cách thêm một điều tra enum_count
vào cuối mỗi enum, có giá trị có nghĩa là đại diện cho chiều dài và kết thúc của enum.Làm thế nào để sử dụng các giá trị lớp enum như là một phần của vòng lặp 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);
};
};
};
Tuy nhiên, khi tôi cố gắng để lặp qua enum, trình biên dịch không thích mà tôi đang cố gắng để tăng suit++
và rank++
trong cho vòng lặp, trong đó nêu:
card.cpp|24|error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]|
card.cpp|25|error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]|
Cách tốt nhất để đi về việc tạo ra một cỗ bài mà không vứt bỏ các cấu trúc dữ liệu enum hữu ích là gì?
[Liên quan?] (Http://stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum) –
@JamesRoot Tôi đã cố gắng sao chép nhiều giải pháp được đề xuất trong câu hỏi đó (mặc dù hầu hết các câu trả lời đều có về các enums chưa được kiểm duyệt) và những người khác tôi tìm thấy trên internet, nhưng vô ích. Vì vậy, tôi đăng ở đây nỗ lực tốt nhất của tôi. – DBedrenko
@NewWorld Tôi đã hỏi [một cái gì đó tương tự] (http://stackoverflow.com/questions/13971544/using-enum-in-loops-and-value-consistency) một số thời gian trước đây. –