我在自己的名称空间中有一些枚举,但是我仍然收到关于“全局名称空间中的污染”的恼人的警告。为什么我会收到这个错误,因为它们甚至不在全局名称空间中?我怎么能摆脱这个警告?确切的警告是:
C26812, The enum type 'Adventure_Game::itemType' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).
头文件中的命名空间中有枚举声明,如下所示:
namespace Adventure_Game {
enum itemType { Consumable, Key };
enum equipType { Unarmed, Weapon, Shield, Armor };
struct invItem { string name = "(name)", desc = "(desc)"; itemType type; unsigned int amount = 0; float value = 0.0f; };
struct invEquip { string name = "(name)", desc = "(desc)"; equipType type; float low = 0.0f, high = 1.0f, weight = 0.0f, value = 0.0f; bool equip = false; };
}
我也尝试过使用枚举类,但我不想在本例中使用它们,因为它会破坏一切,而且我必须在任何地方都使用静态转换,这样就会变得一团糟。我真的很感谢帮助处理这个恼人的警告。
谢谢:)
发布于 2022-10-27 16:29:29
MSVC警告C26812不是来自C/C++编译器。它来自静态代码分析(/analyze
)特性,特别是来自C++核心指南检查器。
检查程序告诉您的“推荐解决方案”是使用C++11强类型枚举。尽管如此,您可以抑制警告,因为C++核心指南只是建议。
#pragma warning(disable : 4619 4616 26812)
// C4619/4616 #pragma warning warnings
// 26812: The enum type 'x' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).
如果需要,还可以通过Microsoft Docs上提到的UI创建自定义规则集,但大多数其他规则都是合理的,因此我认为单一警告抑制是最简单的途径。
https://stackoverflow.com/questions/74215648
复制相似问题