我从 Eclipse 得到的错误是“没有返回,函数返回非空”。我添加了 default: case 以查看它是否会消除错误,但没有 bean。我认为返回一个右值是可以的,因为它会按值复制到堆栈上,因此当 getLogLevelName() 的局部变量超出范围时,字符串的拷贝将存在。确实,调用代码有效,但错误对我来说很神秘。
std::string bmd2::Logger::getLogLevelName(bmd2::Logger::LogLevel logLevel) throw ()
{
switch (logLevel)
{
case bmd2::Logger::LogLevel::LOG_ERROR:
return std::string ("ERROR");
break;
case bmd2::Logger::LogLevel::LOG_WARNING:
return std::string ("WARNING");
break;
case bmd2::Logger::LogLevel::LOG_INFO:
return std::string ("INFO");
break;
case bmd2::Logger::LogLevel::LOG_DEBUG:
default:
return std::string ("DEBUG");
break;
}
}
最佳答案
Eclipse 将此报告为错误,因为无论它使用的是什么 C++ 分析工具/库,它都不会推断出 switch 语句中的 default
case 实际上是函数的结尾。这应该表现得非常好,即使 Eclipse 另有说明。也许安抚 Eclipse 的更好方法是将默认 return 语句放在 switch 语句之后。
std::string bmd2::Logger::getLogLevelName(bmd2::Logger::LogLevel logLevel) throw ()
{
switch (logLevel)
{
case bmd2::Logger::LogLevel::LOG_ERROR:
return std::string ("ERROR");
case bmd2::Logger::LogLevel::LOG_WARNING:
return std::string ("WARNING");
case bmd2::Logger::LogLevel::LOG_INFO:
return std::string ("INFO");
case bmd2::Logger::LogLevel::LOG_DEBUG:
default:
// We will return the default value after the switch statement.
break;
}
// Return default value.
return std::string ("DEBUG");
}
关于c++ - 为什么编译器声称此类方法没有返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641827/