当使用DirectX 11和MSVS2019时,在使用枚举'D3D11_USAGE‘和’D3D_PRIMITIVE_TOPOLOGY‘时会收到以下警告:
警告C26812,枚举类型'D3D11_USAGE‘不限定作用域。喜欢'enum class‘而不是'enum’(Enum.3)。 警告C26812,枚举类型'D3D_PRIMITIVE_TOPOLOGY‘不限定作用域。喜欢'enum class‘而不是'enum’(Enum.3)。
我能做些什么来解决这些警告?代码可以很好地处理警告,但我宁愿让它们消失。
谢谢。
发布于 2020-06-01 18:46:28
C26812是MicrosoftVisualC++代码分析(/analyze ) C++核心指南检查程序规则的一部分。
通常,Windows 10 SDK系统标头中的警告会自动被抑制。最可能的问题是,您正在使用遗留的DirectX SDK,因为这些标头不会被自动抑制。
首先要考虑的是删除遗留DirectX SDK的所有使用。VisualStudio2019附带的Windows10SDK已经包含了所需的所有Direct3D头。如果您使用的是XNAMath,则可以使用DirectXMath。如果您正在使用遗留的D3DX11库,请移动到开源替代方案之一。如果您使用的是XAudio 2.7,则使用XAudio2Redist。如果使用D3DX库编译HLSL着色器,则直接使用D3DCompile。如果您使用的是XInput 1.3,请考虑使用内置XInput版本。
如果删除遗留的DirectX SDK不是一个可行的选项,那么调整包含/库路径,以便尽可能地获得Windows10SDK头。有关详细信息,请参阅Microsoft,但简而言之,请编辑VC++目录,以便DXSDK_DIR包含/lib路径是最后的路径,而不是搜索顺序中的第一条路径。
您还可以通过使用#pragma warning(disable : 26812)和/或命令行选项/wd26812来消除警告。C++核心指南检查器有点迂腐,在某些情况下实际上只是建议。
VisualC++团队已经从Microsoft本机推荐规则中删除了许多检查程序,但仍然列出了26812。您可以创建自定义规则集,也可以在构建时禁用代码分析。就我个人而言,我只是在我的项目中禁止使用这个,因为我有充分的理由不使用class enum。
https://stackoverflow.com/questions/62133506
复制相似问题