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



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

当我的项目按此顺序包含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.hdxgitype.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博客文章的位置。

相关内容

  • 没有找到相关文章

最新更新