C++无法同时使用枚举和开关

标签 c++ enums switch-statement

据我所见,我应该能够在枚举上运行一个开关,但我却吐出错误:

enum EMETH {TRAP=1, SIMP=2, MIDP=3, SINF=4};



switch(METH)
{
    case "TRAP":
        Meth=&Integrators::Trap;
        break;
    case "SIMP":
        Meth=&Integrators::Simp;
        break;
    case "MIDP":
        Meth=&Integrators::Midp;
        break;
    case "SINF":
        Meth=&Integrators::SInf;
        break;
}

错误是

 error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
       case "TRAP":
 error: ‘(int)((long int)"TRAP")’ is not a constant expression

对于每个案例。

最佳答案

通过在枚举成员的名称周围加上引号,您已将它们设为字符串常量。因此,您正在进行无效转换的错误。 Switch 语句对序号进行操作,这就是枚举成员。所以删除 ""s.

enum EMETH {TRAP=1, SIMP=2, MIDP=3, SINF=4};

switch(METH)
{
    case TRAP:
        Meth=&Integrators::Trap;
        break;
    case SIMP:
        Meth=&Integrators::Simp;
        break;
    case MIDP:
        Meth=&Integrators::Midp;
        break;
    case SINF:
        Meth=&Integrators::SInf;
        break;
}

关于C++无法同时使用枚举和开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577722/

相关文章:

c# - 在数据库表中保留枚举

java - 每个统计数据的 Enum-getter 与 Getter

c - 我用什么代码来询问数量和付款?

c++ - 函数名重定义;不同的基本类型

c++ - Openmp 程序在没有临界区的情况下工作

c++ - 可变与惰性评估

c++ - codelite 自动完成不(真的)工作

java - 使用枚举而不是集合的好处

c# - 在处理间隔时,是否有一种优雅的方法可以用 switch 之类的东西替换 if ?

c - Switch Case 的工作方式不同