我正在基于DirectX 11制作项目。之前,我一直在使用带有v110工具集的Visual Studio 2012进行开发。然后我需要使用C ++ 11标准,所以我决定将它移到Visual Studio 2015.我也使用Windows 7,并希望我的项目与这个平台兼容(所以我使用标准的Win项目,而不是对于通用平台)。
在这里,我遇到了新VS工具集v140的问题。由于使用DirectX 11 2010 June SDK,我遇到了下一个编译错误:
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1271): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1271): error C2143: syntax error: missing ',' before '*'
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1275): error C2061: syntax error: identifier 'DXGI_RGBA'
我也在使用effect11和D3DX。所以我不得不用新的工具集重新编译效果11。 D3DX库怎么样 - 我知道不推荐使用它。在我看来,这个库确实会导致编译错误。
此外,我还在一个新的清晰项目中直接从Windows套件中检查了DirectX 11的使用情况(在我的情况下,它使用的是8.1套件)。没有D3DX库,它可以正常工作。
有没有办法同时使用D3DX库和Win Kits,这样就不会产生兼容性问题?或者我应该使用一些库而不是D3DX(如DXTK)?
UPD
我试图将D3DX从我的项目和D3DX11Tex中排除,并完全适应Windows Kits \ 8.1 \ + DirectXMath + DirectXTex(来自Microsoft的Git的库)。下一个错误发生了6次:
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtree(2047): error C3848: expression having type 'const `anonymous-namespace'::StringCompare' would lose some const-volatile qualifiers in order to call 'bool `anonymous-namespace'::StringCompare::operator ()(PCHAR,PCHAR)'
包含xtree.h的目录自动包含在项目路径中。据我所知,没关系。
代码突然导致下一个错误:
bool _Compare(const key_type& _Left, const key_type& _Right) const
{ // compare key_type to key_type, with debug checks
return (_DEBUG_LT_PRED(this->_Getcomp(), _Left, _Right));
}
所有6个错误都指向 xtree.h 中的代码。顺便说一句,我在许多标题中包含 d3d11.h ,这些标题彼此链接很多次(所以像 d3d11.h 一样不在层次结构的顶部单个包含但层次结构中的每个文件都包含此标题。)
问题:此文件在哪里使用(我不直接包含它)?它可能是一个链接问题的王者吗?或者它是某些版本之间的某种冲突(我不知道如何,因为我不使用Dx11 2010年6月SDK,并且不要尝试链接一些不存在的标题,如 D3DX11Tex )?
解: xtree.h 的问题在于使用NON-constant operator()的 std :: map 的自定义函子。因此,将其更改为常数可以解决所有6个错误。
DirectX问题怎么样...不幸的是,真的没有办法使用新版本的VS.因此,正如答案和评论中提到的那样,根本不要使用D3DX。谢谢大家!