【问题标题】:Switch statement doesn't work with enum (C++)Switch 语句不适用于枚举 (C++)
【发布时间】:2014-07-26 11:19:37
【问题描述】:
enum Maximum_Value{
    MAXIMUM_VALUE_1 = 0,
    MAXIMUM_VALUE_7 = 1,
    MAXIMUM_VALUE_15 = 2,
    MAXIMUM_VALUE_26 = 3,
    MAXIMUM_VALUE_34 = 4
};

int value_from_function = functionetc();

switch(value_from_function){
    MAXIMUM_VALUE_1: printf("MAXIMUM_VALUE_1 :%x\n",value_from_function); break;
    MAXIMUM_VALUE_7: printf("MAXIMUM_VALUE_7 :%x\n",value_from_function); break;
    MAXIMUM_VALUE_15: printf("MAXIMUM_VALUE_15 %x\n",value_from_function); break;
    MAXIMUM_VALUE_26: printf("MAXIMUM_VALUE_26 %x\n",value_from_function); break;
    MAXIMUM_VALUE_34: printf("MAXIMUM_VALUE_34 %x\n",value_from_function); break;  
    default: printf("default :%x\n",value_from_function);
 }

上面的代码似乎总是命中默认语句,打印“default :0”,即使它应该命中 MAXIMUM_VALUE_1。

我尝试将 switch 中的变量强制转换为无效

我想我应该将返回值保存到“Maximum_Value”类型的变量中,但是为什么代码仍然不起作用?

编辑:感谢大家指出非常愚蠢的错误:P。问题的根源是从 systemverilog 复制代码,它使用“case”作为关键字而不是“switch”,并且每个 case 开头都不需要“case”

【问题讨论】:

  • this question 的可能重复项。
  • 你的switch中好像没有case??
  • 您在每个标签前都缺少case 关键字!
  • 不是重复的,只是更愚蠢:P
  • 很遗憾我不能删除这个,因为这是一个简单的错字,不是一个重要的问题

标签: c++ enums switch-statement


【解决方案1】:

枚举器不是标签,而是switch 语句跳转到标签。你用case创建标签switch语句可以跳转到:

case MAXIMUM_VALUE_1: ...; break;

【讨论】:

  • 假设这个 did 编译没有错误。那么,编译器是否将这些行 MAXIMUM_VALUE_1: 视为简单的行标签?变量名和/或枚举成员是否允许作为标签?
  • @Jongware:好吧,代码确实可以编译,但 switch 语句没有任何理由跳转到相应的标签。不过,您可以使用goto MAXIMUM_VALUE_15; 跳到switch 语句的中间。
【解决方案2】:

添加 case 关键字就可以了。

case MAXIMUM_VALUE_1: printf("MAXIMUM_VALUE_1 :%x\n",value_from_function); break;
case MAXIMUM_VALUE_7: printf("MAXIMUM_VALUE_7 :%x\n",value_from_function); break;
case MAXIMUM_VALUE_15: printf("MAXIMUM_VALUE_15 %x\n",value_from_function); break;
case MAXIMUM_VALUE_26: printf("MAXIMUM_VALUE_26 %x\n",value_from_function); break;
case MAXIMUM_VALUE_34: printf("MAXIMUM_VALUE_34 %x\n",value_from_function); break;  
default: printf("default :%x\n",value_from_function);

【讨论】:

    【解决方案3】:

    您在每个标签前都缺少case 关键字!

    switch case的语法是-

    switch(type){
    case type1: ....; break;
    case type2: ....; break;
    ......
    default: .....;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多