c ++不能出现在常量表达式中

时间:2012-11-13 02:04:13

标签: c++

  

可能重复:
  How do I select a range of values in a switch statement?

我遇到了一些错误,我一直在寻找一段时间,但我不知道错误的原因是什么。 (我对编程很陌生。)

以下是我遇到的错误:

error: 'Essais' cannot appear in a constant-expression| (line 200)
warning: overflow in implicit constant conversion| (line 202)

我有案例和cote:

  char AfficherCote (int Essais)
 {
 char Cote;
 switch (Essais)
  {
(line200)       case Essais<=20:
    {
(line 202)           Cote='Excellent';

        return (Cote);
        break;
    }
    case Essais<=40:
    {
        Cote='Très bon';
        return (Cote);
        break;
    }
    case Essais<=60:
    {
        Cote='Bon';
        return (Cote);
        break;
    }
    case Essais<=80:
    {
        Cote='Moyen';
        return (Cote);
        break;
    }
    case Essais<=100:
    {
        Cote='Muvais';
        return (Cote);
        break;
    }
    case Essais>=100:
    {
        Cote='Très mauvais';
        return (Cote);
    }
  }
}

2 个答案:

答案 0 :(得分:3)

switch-case仅适用于常量值(*)(例如3'a'),而不适用于范围(例如<=100 )。您也不得在case语句中包含变量名称。正确的语法如下:

switch (Essais)
{
case 1:
   /* ... */
  break;
case 2:
   /* ... */
   break;
default:
   /* ... */
}

如果您需要范围测试,请使用if代替switch-case

if (Essais <= 80)
  return "Cote";
else if (Essais <= 100)
  return "Muvais";

另请注意,您不能对字符串使用单引号'。请改用双引号",并使用std::string类型的变量(不是char)来存储字符串。


(*)确切地说,case语句中给出的条件必须是整数类型,枚举类型或类类型的常量表达式 convertible 为整数或枚举类型(有关详细信息,请参阅C ++标准的第6.4.2 / 2节)。

答案 1 :(得分:0)

这不是switch阻止工作的方式。你需要做这样的事情:

switch (Essais) {
    case 20:
        ...
    case 40:
        ...
    case 60:
        ...
    /* etc, etc */
}

每个caseswitch语句中的值与特定常量值进行比较。如果它们相等,则执行该块。在您的代码中,编译器抱怨,因为像Essais<=20这样的表达式不是它在编译时可以计算的常量。

鉴于您要做的事情,if ... else if ... else链更合适。 switch块只能针对特定值进行测试,并且无法处理测试范围,这是您尝试执行的操作。