我正在試圖製作一個輸出文件中使用最多的字符的程序。爲什麼編譯器不讓我在開關盒中使用變量?
爲什麼編譯器給我一個錯誤,當我試試這個:
for (char i = 97 ; i <=122 ; i ++) {
switch (x) {
case i :
break;
}
}
此代碼使用一個開關,以獲得最常用的字符。錯誤是:
'i' cannot appear in a constant-expression
我正在試圖製作一個輸出文件中使用最多的字符的程序。爲什麼編譯器不讓我在開關盒中使用變量?
爲什麼編譯器給我一個錯誤,當我試試這個:
for (char i = 97 ; i <=122 ; i ++) {
switch (x) {
case i :
break;
}
}
此代碼使用一個開關,以獲得最常用的字符。錯誤是:
'i' cannot appear in a constant-expression
case
標籤必須編譯時間常數,你要使用可變i
,所以你得到的,而描述性錯誤消息。
如果您需要針對變量進行測試,則直接替換爲if-else if -...- else梯形圖。雖然你的簡單情況沒有「其他」部分,此外,break
突破了switch
,所以你不能用它來突破一個循環,然後(直接替換將使用goto
,但它的遠更好地重新思考幾乎所有情況下都是你的邏輯)。
所以寫你這樣的代碼:
for (char i = 97 ; i <=122 ; i ++) {
if (x == i) {
break; // did you mean to break the loop?
}
}
同樣值得注意的是,OP可能認爲他正在迭代'a'到'z' - 但是C++標準並不能保證這一點,事實上有些機器並不是真的。 –
@hyde謝謝,我現在明白了。 (我是一個初學者) –
@MartinBonner我主要是這樣認爲的,指出這只是無用的信息超載對於剛剛學習C++的人來說......但是這是一個教育學意見。 – hyde
「我」不能出現在一個常數表達式 因爲編譯器不明白什麼是「i'.Next,你應該通過我進入 開關。 你可以做到。
因爲它違反規範。 – xaxxon
@xaxxon有什麼方法可以修復它? –
它與循環無關,'case'「參數」需要保持不變,而'i'不是。 –