2016-04-04 25 views
-1
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' 

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

+3

您的意思是写'如果( t.symbol ==未知)'? –

回答

4

您可以使用这样的.运营商访问结构的特定成员

if(t.v == Unknown) return false

正如评论中所建议的,您也可以修改您的结构并添加一个返回布尔值的函数。

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

然后你就可以做

if(t.checkSymbolUnknown()) return false; 
+0

另外,你可以定义一个方法来完成这件事,这将有助于你的设计更加全面。 举例如下: bool check_unknown()const { return v == Unknown; } – SenselessCoder

+0

@SenselessCoder:'isUnknown'会更好。 –

+0

它可能会,你是对的。在设计中,命名是一个比提出算法/代码更大的问题:P – SenselessCoder

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;