【发布时间】:2014-02-08 04:17:17
【问题描述】:
我从 Eclipse 得到的错误是“No return, in function return non-void”。我添加了 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;
}
}
【问题讨论】:
-
std::string有一个隐式转换构造函数,所以你可以只做return "string text";因为std::string是返回类型,所以会自动创建一个。 -
明确一点也没有错
-
去掉所有无法访问的break语句。
-
我以为是eclipse CDT的错误提示,gcc或者msvc都可以编译。
-
Eclipse 不够聪明,无法处理不必要的中断语句。在我删除休息后,日食很高兴。
标签: c++ c++11 enums switch-statement