我知道有很多关于宏重定义问题的帖子,但我仍然无法理解重新排序如何解决问题。
当我的项目按此顺序包含VC++ Directories->Include Directories
如下所示时
在C/C++ -> General -> Additional Include Directories
,如图所示
我收到macro redefinition
警告:
1>c:***************************************directxdxgitype.h(12): warning C4005: 'DXGI_STATUS_OCCLUDED' : macro redefinition (############.cpp)
1> C:Program Files (x86)Windows Kits8.0Includesharedwinerror.h(49449) : see previous definition of 'DXGI_STATUS_OCCLUDED'
但是,当我从Additional Include Directories
中删除$(SolutionDir)commonExternalLibsdirectx
并将其移动到VC++ Directories->Include Directories
警告时,警告消失了。
我检查了winerror.h
和dxgitype.h
,我没有看到#undef DXGI_STATUS_OCCLUDED
.那么,重新排序是如何修复警告的呢?至少一个标头应该具有#undef
,以便允许在其他标头中定义它,对吗? 另外,Additional Include Directories
是在Include Directories
之后加载的还是什么?
$(SolutionDir)commonExternalLibsdirectx
里有什么?我怀疑它有旧版 DirectX SDK 标头的副本,这意味着您正在将旧的 DirectX SDK 标头与新的 Windows 8.0 SDK 标头混合在一起。您看到的错误在 MSDN 上特别提到:
c. 删除项目中对 DXGIType.h 的所有引用。Windows SDK 中不存在此标头,并且 DirectX SDK 版本与新的 winerror.h 冲突。
理想情况下,你只需停止使用旧版 DirectX SDK,如果您删除该文件夹并且它仍在生成,那么您应该这样做。
否则,MSDN 中介绍了将旧版 DirectX SDK 与 Windows 8.x SDK 混合使用的情况。基本上,您必须将 DirectX SDK include/lib 路径放在 Windows 8.x SDK include/lib 路径之后。
另请参阅DirectX SDK博客文章的位置。