C++ 枚举丢失导致编译器出错
以下代码来自:C++ 枚举丢失导致编译器出错,c++,c++11,enums,C++,C++11,Enums,以下代码来自: 我想删除默认值,如果在我的枚举上切换未完成,则强制编译器生成错误 GCC/Clang 你在找我 每当switch语句具有枚举类型的索引时发出警告,并且 缺少该枚举的一个或多个命名代码的大小写。 枚举范围之外的案例标签在以下情况下也会引发警告: 使用此选项。-Wswitch与此之间的唯一区别 选项是,此选项提供有关忽略事件的警告 枚举代码,即使存在默认标签 即使使用默认值,它也会抱怨缺少Windows枚举。只需为Windows创建案例,并对默认值进行故障排除,以抑制枚举 Visua
我想删除
默认值
,如果在我的枚举上切换未完成,则强制编译器生成错误 GCC/Clang
你在找我
每当switch语句具有枚举类型的索引时发出警告,并且
缺少该枚举的一个或多个命名代码的大小写。
枚举范围之外的案例标签在以下情况下也会引发警告:
使用此选项。-Wswitch与此之间的唯一区别
选项是,此选项提供有关忽略事件的警告
枚举代码,即使存在默认标签
即使使用默认值,它也会抱怨缺少Windows枚举。只需为Windows创建案例,并对默认值进行故障排除,以抑制枚举
Visual Studio
VS在编译器级别3和4处理此问题。您需要启用警告C4061/C4062
enum class OS_type { Linux, Apple, Windows };
const std::string ToString(OS_type v)
{
switch (v)
{
case Linux: return "Linux";
case Apple: return "Apple";
case Windows: return "Windows";
default: return "[Unknown OS_type]";
}
}
const std::string ToString(OS_type v)
{
// warning: enumeration value 'Windows' not handled in switch [-Wswitch-enum]
switch (v)
{
case OS_type::Linux: return "Linux";
case OS_type::Apple: return "Apple";
default: return "[Unknown OS_type]";
}
}