0

カードを表すクラスを作ろうとしています。しかし、コンパイル中にこのエラーに直面しました。

エラー:予期される `; ' 「スーツ」の前。

誰かがこのコードの問題を助けることができますか?

#include<string>
using namespace std;
class Card {

private:
       Card::Suit suit;
       Card::CardName cardName;
public:
    enum Suit {Clubs, Diamonds, Hearts, Spades, UNKNOWN_SUIT};
    enum  CardName {Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, UNKNOWN_CARDNAME};
    class NotInitalised : public exception{};
    Card ();
    Card (int card);
    Card (Card::Suit s, Card::CardName n);
    void setCard(Card::Suit, Card::CardName);
    Card::Suit getSuit();
    Card::CardName getCardName();
    Card::CardName getCardName(int);
    int getCardValue();
    string toString();
};
4

3 に答える 3

2

列挙型定義を使用する前に移動する必要があります。たとえば、次のようなものです。

#include<string>
using namespace std;
class Card {

public: 
    enum Suit {Clubs, Diamonds, Hearts, Spades, UNKNOWN_SUIT};
    enum  CardName {Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, UNKNOWN_CARDNAME};
private:
       Card::Suit suit;
       Card::CardName cardName;
public:
    class NotInitalised : public exception{};
    Card ();
    Card (int card);
    Card (Card::Suit s, Card::CardName n);
    void setCard(Card::Suit, Card::CardName);
    Card::Suit getSuit();
    Card::CardName getCardName();
    Card::CardName getCardName(int);
    int getCardValue();
    string toString();
};

動作するはずです。

また、クラス定義内の列挙型の使用を修飾する必要はありません。つまり、代わりに

Card::Suit suit;

あなたが使用することができます

Suit suit;

私は通常、クラスのすべてのパブリック要素をプライベート要素の前に宣言します。これは、クラスを見たときにクラスのパブリックインターフェイスが必要なためですが、これは他の人が同意しない可能性のあるスタイル設定にすぎません。

于 2012-10-30T07:35:14.997 に答える
2

C++ ではいつものように、何かを使用する前に宣言する必要があります。したがって、スーツ メンバーの宣言の前に enum Suit の定義を移動する必要があります。

于 2012-10-30T07:27:29.180 に答える
0

スコープ解決演算子を削除し、その型を使用する前に型宣言を移動します

クラスは次のようになります。

using namespace std;
class Card {

private:
    enum Suit {Clubs, Diamonds, Hearts, Spades, UNKNOWN_SUIT};
    enum  CardName {Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, UNKNOWN_CARDNAME};

     Suit suit;
     CardName cardName;
public:
    class NotInitalised : public exception{};
    Card ();
    Card (int card);
    Card (Suit s, CardName n);
    void setCard(Suit, CardName);
    Suit getSuit();
    CardName getCardName();
    CardName getCardName(int);
    int getCardValue();
    string toString();
};
于 2012-10-30T07:31:29.833 に答える