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 回答