C++ 重新排序包含目录如何解决宏重新定义问题?

C++ 重新排序包含目录如何解决宏重新定义问题?,c++,compiler-warnings,include-guards,C++,Compiler Warnings,Include Guards,我知道有很多关于宏重新定义问题的帖子,但我仍然无法理解重新排序是如何解决问题的 当我的项目在VC++目录->包含目录中按此顺序包含时,如中所示 在C/C++->General->Additional Include目录中,如图所示 我收到宏重新定义警告: 1>c:***************************************\directx\dxgitype.h(12): warning C4005: 'DXGI_STATUS_OCCLUDED' : macro redef

我知道有很多关于宏重新定义问题的帖子,但我仍然无法理解重新排序是如何解决问题的

当我的项目在VC++目录->包含目录中按此顺序包含时,如中所示 在C/C++->General->Additional Include目录中,如图所示 我收到宏重新定义警告:

1>c:***************************************\directx\dxgitype.h(12): warning C4005: 'DXGI_STATUS_OCCLUDED' : macro redefinition (############.cpp)
1>          C:\Program Files (x86)\Windows Kits\8.0\Include\shared\winerror.h(49449) : see previous definition of 'DXGI_STATUS_OCCLUDED'
但是,当我从其他包含目录中删除$SolutionDir\common\ExternalLibs\directx并将其移动到VC++目录->包含目录时,警告消失

我检查了winerror.h和dxgitype.h,没有看到未定义的DXGI\u状态被遮挡。那么,重新订购如何修复警告?至少有一个标头应该具有undef,以便允许在其他标头中定义它,对吗?另外,在包含目录或什么之后加载其他包含目录?

在$SolutionDir\common\ExternalLibs\directx中有什么?我怀疑它有一个旧的DirectX SDK头的副本,这意味着您将旧的DirectX SDK头与新的Windows 8.0 SDK头混合在一起。您所看到的错误在以下内容中特别提到:

c。删除项目中对DXGIType.h的所有引用。Windows SDK中不存在此标头,并且DirectX SDK版本与新的winerror.h冲突

理想情况下,您应该停止使用传统的DirectX SDK,如果您删除了该文件夹,它仍在生成,那么您应该这样做

否则,将介绍如何将传统DirectX SDK与Windows 8.x SDK混合使用。基本上,您必须将DirectX SDK include/lib路径放在Windows 8.x SDK include/lib路径之后


也请参阅博客文章。

不要包含包含您的问题相关信息的图像链接,如果它最终成为一个常见的死链接,对其他社区成员来说是无用的。编辑您的帖子并将其包含在那里。@CaptainObvlious,首先我不能在这里发布图片。当我尝试这个系统时,我说我需要超过10的声誉才能发布图片!其次,链接没有死!那么,为什么您否决了?然后复制并粘贴包含目录配置字段的内容,并说明这些字段是什么以及它们来自哪些字段。FWIW您提供的图像不完整,并且没有显示在Visual Studio中配置的所有包含目录。