我知道有很多关于宏重新定义问题的帖子,但我仍然无法理解重新排序如何解决问题。
当我的项目在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.h
和dxgitype.h
,但我没有看到#undef DXGI_STATUS_OCCLUDED
。那么,重新排序如何修复警告?至少有一个标题应该有#undef
,以便允许在其他标题中定义,对吧?此外,在Additional Include Directories
或之后加载Include Directories
?
答案 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博文。