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

时间:2014-12-12 22:55:35

标签: c++ compiler-warnings include-guards

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

当我的项目在VC++ Directories->Include Directories中按此顺序添加时,如here所示
并在C/C++ -> General -> Additional Include Directories中显示here
我收到macro redefinition警告:

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移除Additional Include Directories并将其移至VC++ Directories->Include Directories时,警告就会消失。

我检查了winerror.hdxgitype.h,但我没有看到#undef DXGI_STATUS_OCCLUDED。那么,重新排序如何修复警告?至少有一个标题应该有#undef,以便允许在其他标题中定义,对吧?此外,在Additional Include Directories或之后加载Include Directories

1 个答案:

答案 0 :(得分:0)

$(SolutionDir)\common\ExternalLibs\directx中的内容是什么?我怀疑它有一个旧版DirectX SDK标头的副本,这意味着您将旧的DirectX SDK标头与新的Windows 8.0 SDK标头混合在一起。您在MSDN上明确提到了错误:

  

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

理想情况下,您只是停止使用旧版DirectX SDK,如果删除该文件夹并且仍在构建,那么您应该这样做。

否则,MSDN涵盖了将旧版DirectX SDK与Windows 8.x SDK混合使用。基本上,您必须在 Windows 8.x SDK include / lib路径之后放置DirectX SDK include / lib路径

请参阅Where is the DirectX SDK博文。