首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在自定义命名空间中抑制非作用域枚举警告?

如何在自定义命名空间中抑制非作用域枚举警告?
EN

Stack Overflow用户
提问于 2022-10-27 00:54:13
回答 1查看 79关注 0票数 -1

我在自己的名称空间中有一些枚举,但是我仍然收到关于“全局名称空间中的污染”的恼人的警告。为什么我会收到这个错误,因为它们甚至不在全局名称空间中?我怎么能摆脱这个警告?确切的警告是:

代码语言:javascript
运行
复制
C26812, The enum type 'Adventure_Game::itemType' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).

头文件中的命名空间中有枚举声明,如下所示:

代码语言:javascript
运行
复制
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; };

}

我也尝试过使用枚举类,但我不想在本例中使用它们,因为它会破坏一切,而且我必须在任何地方都使用静态转换,这样就会变得一团糟。我真的很感谢帮助处理这个恼人的警告。

谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-27 16:29:29

MSVC警告C26812不是来自C/C++编译器。它来自静态代码分析(/analyze)特性,特别是来自C++核心指南检查器

检查程序告诉您的“推荐解决方案”是使用C++11强类型枚举。尽管如此,您可以抑制警告,因为C++核心指南只是建议。

代码语言:javascript
运行
复制
#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创建自定义规则集,但大多数其他规则都是合理的,因此我认为单一警告抑制是最简单的途径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74215648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档