我正在试图制作一个输出文件中使用最多的字符的程序。为什么编译器不让我在开关盒中使用变量?
为什么编译器给我一个错误,当我试试这个:
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'不是。 –