2016-04-04 63 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;