令牌和枚举类型之间的操作数

时间:2016-04-04 10:06:45

标签: c++ struct enums

   enum symbol {Number, Letter, Open_Bracket, Closed_Bracket, Unknown}

   struct token {
   string s;
   symbol v;
   };

现在,我想编写一个函数,如果令牌t未知,则返回false。我试过了

bool check(token &t)
if (t == Unknown) 
return false;

但我知道这是错的,因为t是一个标记而Unknown是一个符号。我怎样才能使它们成为同一类型?

我无法使用点符号,因为如果我使用

if (t.v == Unknown) return false;

我收到此消息

multiple definition of 't'

(我忘记在之前添加函数参数。)

2 个答案:

答案 0 :(得分:4)

您可以使用此{/ p>之类的.运算符访问结构的特定成员

if(t.v == Unknown) return false

根据评论中的建议,您还可以修改结构并添加一个返回布尔值的函数。

struct token {
    string s;
    symbol v;
    bool checkUnknown(){
        return v == Unknown;
    }
};

然后你可以做

if(t.checkSymbolUnknown()) return false;

答案 1 :(得分:3)

如果您有C ++ 11编译器,我建议使用Scoped enumerations

enum class symbol {Number, Letter, Open_Bracket, Closed_Bracket, Unknown};

struct token {
   string s;
   symbol v;
};

// -----

if (t.v == symbol::Unknown)
    return false;