2014-11-14 72 views
1

我想用字符串寫一個切換案例。我用枚舉,我這樣寫:C++中的字符串切換案例

string enum { 
    next = 0, 
    prev = 1, 
    ext = 2 
    }order; 
while(true) 
    { 
     cin >> order; 
     switch(order) 
     { 
     case 0: 
      //do order0 
      break; 
     case 1 : 
      //do order 1 
      break; 
     case 2 : 
      //do order2 
      return; 
      break; 
     default: 
      cout << "Bad input"; 
      break; 
    } 
} 

但結果是此錯誤:

error C2236: unexpected token 'enum'. Did you forget a ';'?

這是什麼錯誤的原因是什麼?

是否有任何其他方式來寫字符串開關?

+5

什麼是'string enum'? – 2014-11-14 16:12:05

+0

@ PiotrS.I剛剛看到一個這樣的例子。 – zahra 2014-11-14 16:13:06

+1

'string'是一個類,'enum'是一個保留關鍵字。編譯器可能認爲你試圖用名稱「enum」來實例化一個'string'對象,所以它後面緊跟着一個';'(或者一個賦值,然後是一個';')。 – 2014-11-14 16:19:37

回答

1

不打的語言。正如您所知,您無法在C++中切換字符串。代替使用if,else if

你會看到各種不同的嘗試不時出現。地圖,枚舉和哈希是我能想到的三個。但他們只是混淆。而且你可能需要break報表,這會進一步惡化事情。 (如果通過後續已經有用,則相應地構建相應的if塊)。

您的;錯誤是由於string enum合成無效。

+0

我不推薦使用'if,else if'階梯。包含函數對象,函數指針或轉換數據的表查找將更易於閱讀和維護。 – 2014-11-14 17:47:31

0

這是什麼: -

string enum { 
    next = 0, 
    prev = 1, 
    ext = 2 
    }order; 

它應該是: -

enum Mydata { 
     next = 0, 
     prev = 1, 
     ext = 2 
     }; 
0

這個錯誤來自:

string enum { 
    next = 0, 
    prev = 1, 
    ext = 2 
}order; 

這是無效的語法,枚舉和字符串是兩種類型的,你不能讓一個類型的實例與其他保留關鍵字。

相反,你要聲明枚舉是這樣的:

enum order{ 
    next = 0, 
    prev = 1, 
    ext = 2 
}; 

但有機會,你真的不想去用這種方式解決你的問題。一個簡單的方法就是使用條件語句if或者代替std::map

cin >> order; 
if(order == "0"){ 

}else if(order == "1"){ 

}else{ 

} 
0

究其原因是因爲'string enum'無效。 這裏是一個例子:

enum Orders{ 
    next=0, 
    prev=1, 
    ext=2 
    }; 

    while(true) 
    { 
    int oder=-1; 
    cin>>order; 
    switch(order) 
     { 
     case next: 
     //do something 
     break; 
     case prev: 
     //do something else 
     break; 
     case ext: 
     //something else 
     break; 
     default: 
     cout << "error\n"; 
     break; 
     } 
    }