DirectX 11枚举D3D11_USAGE和D3D_PRIMITIVE_TOPOLOGY警告

时间:2020-06-01 13:36:45

标签: c++ enums directx-11

在使用DirectX 11和MSVS2019时,使用枚举“ D3D11_USAGE”和“ D3D_PRIMITIVE_TOPOLOGY”时出现以下警告:

警告C26812枚举类型'D3D11_USAGE'未作用域。更喜欢枚举 类,而不是“枚举”(枚举3)。

警告C26812枚举类型'D3D_PRIMITIVE_TOPOLOGY'未作用域。 比“枚举”(枚举3)更喜欢“枚举类”。

我该如何解决这些警告?该代码可以很好地处理警告,但我宁愿将其删除。

谢谢。

1 个答案:

答案 0 :(得分:1)

C26812是Microsoft Visual C ++代码分析(/analyzeC++ Core Guidelines checkers规则的一部分。

通常,Windows 10 SDK系统标题中的警告会自动被禁止。 最可能的问题是您使用的是旧版DirectX SDK,因为这些标头不会被自动删除。

首先要考虑的是删除所有对旧版DirectX SDK的使用。 Visual Studio 2019随附的Windows 10 SDK已包含所需的所有Direct3D标头。如果使用XNAMath,则可以改用DirectXMath。如果您使用的是旧版D3DX11库,请移至open source alternatives之一。如果您使用的是XAudio 2.7,请改用XAudio2Redist。如果使用D3DX库编译HLSL着色器,请直接使用D3DCompile。如果您使用的是XInput 1.3,请改用built-in XInput版本。

如果删除旧版DirectX SDK不可行,请调整include / lib路径,以便尽可能获取Windows 10 SDK标头。有关详细信息,请参见Microsoft Docs,但请简短编辑 VC ++目录,以使DXSDK_DIR的include / lib路径为 LAST 而不是 FIRST < / em>进行搜索。

您也可以忽略警告,方法是使用#pragma warning(disable : 26812)和/或命令行选项/wd26812取消警告。 《 C ++核心准则》检查器有些古怪,在某些情况下实际上只是advice

Visual C ++团队从 Microsoft本机推荐规则中删除了许多检查器,但仍列出了26812。您可以创建自定义规则集,也可以在Build上禁用代码分析。就我个人而言,由于我有充分的理由不使用class enum。我只是在项目中隐瞒了这一点。