gpt4 book ai didi

c++ - 错误 : switch quantity not an integer

转载 作者:可可西里 更新时间:2023-11-01 15:36:10 34 4
gpt4 key购买 nike

我已经通过 StackOverflow 和多谷歌链接研究了我的问题,但我仍然感到困惑。我想对我来说最好的事情就是问...

我正在创建一个简单的命令行计算器。到目前为止,这是我的代码:

const std::string Calculator::SIN("sin");  
const std::string Calculator::COS("cos");
const std::string Calculator::TAN("tan");
const std::string Calculator::LOG( "log" );
const std::string Calculator::LOG10( "log10" );

void Calculator::set_command( std::string cmd ) {

for(unsigned i = 0; i < cmd.length(); i++)
{
cmd[i] = tolower(cmd[i]);
}

command = cmd;
}

bool Calculator::is_legal_command() const {

switch(command)
{
case TAN:
case SIN:
case COS:
case LOG:
case LOG10:
return true;
break;
default:
return false;
break;
}

}

我得到的错误是:

Calculator.cpp: In member function 'bool Calculator::is_trig_command() const':  
Calculator.cpp: error: switch quantity not an integer
Calculator.cpp: error: 'Calculator::TAN' cannot appear in a constant-expression
Calculator.cpp: error: 'Calculator::SIN' cannot appear in a constant-expression
Calculator.cpp: error: 'Calculator::COS' cannot appear in a constant-expression

强大的互联网,它说允许在 switch 语句中使用字符串。

谢谢大家,感谢您的帮助。

最佳答案

switch , 表达式必须是“integral type 或可以明确转换为整数类型的类类型”( quoting VS2008 docs )。

字符串类没有“明确转换为整数类型”,如 char

作为解决方法:

  1. 创建 map<string, int>并打开 map 的值:switch(command_map[command])`

  2. 做一组if/else而不是切换。更烦人且难以阅读,所以我推荐 map 路线。

顺便说一句,对于像这样非常复杂的逻辑,一个更好的解决方案是改进映射解决方案以摆脱 switch完全改为使用函数查找:std::map<std::string, functionPointerType> .您的特定情况可能不需要它,但对于复杂的超长查找逻辑来说速度要快得多。

关于c++ - 错误 : switch quantity not an integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535825/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com