为什么编译器不允许我在开关案例中使用变量?

时间:2016-04-24 06:35:46

标签: c++ switch-statement

我试图创建一个输出文件中最常用字符的程序。

为什么编译器在尝试时会给我一个错误:

    for (char i = 97 ; i <=122 ; i ++) {
        switch (x) {

                case i :  
                break;
        }
    }

此代码使用开关来获取最常用的字符。错误是:

'i' cannot appear in a constant-expression

2 个答案:

答案 0 :(得分:0)

case标签需要编译时间常数,并且您尝试使用变量i,因此您会得到相当描述性的错误消息。

如果你需要对变量进行测试,直接替换是if-else if -...- else梯形图。虽然你的简单案例没有&#34;否则&#34;部分,此外,break突破了switch,因此您无法使用它来摆脱循环(直接替换将使用goto,但它&# 39; s 在几乎所有情况下都能更好地重新思考你的逻辑。)

所以写下你的代码:

for (char i = 97 ; i <=122 ; i ++) {
    if (x == i) {
       break; // did you mean to break the loop?

    }
}

答案 1 :(得分:0)

'我'不能出现在常量表达式中 因为编译器不明白什么是'i'。接下来,你应该将i传递给 开关。 你可以做到。