C ++错误:“表达式必须具有整数或枚举类型” [重复]

Posted

技术标签:

【中文标题】C ++错误:“表达式必须具有整数或枚举类型” [重复]【英文标题】:C++ Error: "Expression must have integral or enum type" [duplicate] 【发布时间】:2014-05-22 17:06:34 【问题描述】:

我在下面我的(不完整)函数的switch 语句中收到错误“表达式必须具有整数或枚举类型”。我已经盯着它看了一会儿,无法弄清楚这是怎么回事。任何见解都非常感谢。

std::string CWDriver::eval_input(std::string expr)

    std::vector<std::string> params(split_string(expr, " "));
    std::string output("");
    if (params.size() == 0)
    
        output = "Input cannot be empty.\n";
    
    else
    
        switch (params[0])
        
            case "d":

        
    

【问题讨论】:

它有什么令人困惑的地方?错误告诉你发生了什么。你在哪里读到你可以在std::stringswitch 也许你错过了字符串不是整数类型的点? 在 C/C++ 中,不能开启字符串或其他复合类型。 您是否打算开启 params[0][0]? IE。字符“d”? 【参考方案1】:

错误很明显。您只能使用 integral 类型(integerenumchar 等可转换integral值),或任何表达式switch 语句中计算为整数类型。

【讨论】:

【参考方案2】:

params[0] 的类型为 std::string。您不能将std::string 类型(不是整数)用作switch 参数。如果您确信字符串不为空,请使用switch (param[0][0])case 'd'。但在这种情况下,您将只能切换一个字符的字符串。如果需要切换较长的字符串,则需要使用if-else if-else if-...的序列。

【讨论】:

以上是关于C ++错误:“表达式必须具有整数或枚举类型” [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中compiling aaaa.c...是啥错误

C/C++ VS 代码扩展引发构建错误:““C/C++”任务的任务提供程序意外提供了“shell”类型的任务。”

段错误的最小 C/C++ 程序? [复制]

刚刚完成C语言作业,有错误,希望高手来解决

在vs里写c语言,为啥会出现这样的错误呢?

c/c++ 编译错误汇总