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

Operand between token and enum type

本文关键字:操作数 之间 类型 枚举 令牌      更新时间:2023-10-16
   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'

(我之前忘了添加函数参数。

您可以使用

. 运算符访问结构的特定成员,如下所示

if(t.v == Unknown) return false

如注释中所建议的,您还可以修改结构并添加一个返回布尔值的函数。

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

然后你可以做

if(t.checkSymbolUnknown()) return false;

如果你有一个 C++11 编译器,我建议使用 Scoped 枚举:

enum class symbol {Number, Letter, Open_Bracket, Closed_Bracket, Unknown};
struct token {
   string s;
   symbol v;
};
// -----
if (t.v == symbol::Unknown)
    return false;