C++作为参数传递枚举类型

15
如果我有一个像这样的简单卡片类:
class Card {
        public:
            enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES };
            Card(Suit suit);
    };

我希望在另一个文件中创建一个卡片实例,如何传递枚举值?

#include "Card.h"
using namespace std;
int main () {
    Suit suit = Card.CLUBS;
    Card card(suit);
    return 0;
}

错误:'Suit'在此作用域中未声明

我知道这个可以工作:

#include "Card.h"
using namespace std;
int main () {
    Card card(Card.CLUBS);
    return 0;
}

但我如何在另一个文件中创建一个Suit类型的变量?


4
WTF,Card.CLUBS 没有报错???我认为应该是 Card::CLUBS 才对啊... x_x - mingos
2个回答

15

使用Card::Suit来引用类型,当不在Card的作用域内时。实际上,你应该也像这样引用花色;我有点惊讶Card.CLUBS可以编译,我一直认为你必须使用Card::CLUBS


请使用 Card.CLUBS,因为它与问题相匹配。 - kapilddit

7

Suit是Card命名空间的一部分,因此请尝试:

Card::Suit suit = Card::CLUBS;

天哪,这简直不值得花费那么大力气。我打算使用一个 int 并在代码中加上注释。有人能想到一个纸牌游戏吗,其中梅花会变化,但每次都需要完整枚举的引用吗? - Paul McCarthy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接