【问题标题】:Operand between token and enum type令牌和枚举类型之间的操作数
【发布时间】:2016-04-04 10:06:45
【问题描述】:
   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.symbol == Unknown)

标签: c++ struct enums


【解决方案1】:

您可以像这样使用. 运算符访问结构的特定成员

if(t.v == Unknown) return false

按照 cmets 中的建议,您还可以修改结构并添加一个返回布尔值的函数。

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

然后你就可以了

if(t.checkSymbolUnknown()) return false;

【讨论】:

  • 此外,您可以定义一个完全执行此操作的方法,这将有助于您的设计更全面。例如: bool check_unknown() const { return v == Unknown; }
  • @SenselessCoder: isUnknown 会更好。
  • 它可能会,你是对的。在设计中命名是一个比提出算法/代码更大的问题:P
【解决方案2】:

如果你有 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多