错误“无法打开包含文件”,但它不包含在代码中

Posted

技术标签:

【中文标题】错误“无法打开包含文件”,但它不包含在代码中【英文标题】:error "Cannot open include file", but it's not included in code 【发布时间】:2013-06-25 09:05:58 【问题描述】:

在 Visual Studio 2012 中安装 11 月 CTP 后出现错误。 错误在 boost 库的 unordered_set.hpp 中。但我没有在代码中的任何地方包含unordered_setinitializer_list。我只在一个文件中使用了 boost,我相信这不是原因。

unordered_set.hpp 中的错误:

#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
#include <initializer_list>  //error C1083: Cannot open include file: 'initializer_list': No such file or directory d:\boost\unordered\unordered_set.hpp
#endif

编辑:

之后我卸载了 11 月 CTP,但仍然出现同样的错误。

【问题讨论】:

使用“显示包含”选项来查看会发生什么 Where is _CPPLIB_VER defined and is it modifiable in visual studio 的可能重复项 【参考方案1】:

C++11 在 VS2012 中默认启用。 来自boost 标头

#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
#include <initializer_list>
#endif

您可以尝试定义BOOST_NO_0X_HDR_INITIALIZER_LIST,或查找initializer_list 标头位置。

// config/suffix.hpp
#if defined(BOOST_NO_INITIALIZER_LISTS) && !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
#  define BOOST_NO_0X_HDR_INITIALIZER_LIST
#endif

// config/compilers/visualc.hpp
#if _MSC_VER <= 1500  || !defined(BOOST_STRICT_CONFIG) // 1500 == VC++ 9.0
#  define BOOST_NO_INITIALIZER_LISTS
#endif

BOOST_STRICT_CONFIG 可以在config/user.hpp 中评论。

但是,您似乎没有现代 Visual C++ 标头,这很奇怪,因为您有 VS2012(initializer_list 标头实际上将添加到 VS2010 中)。

【讨论】:

@zwx 看起来很不真实。 ***.com/questions/3536029/… 这很奇怪。我卸载了 11 月的 CTP,但仍然遇到同样的错误。【参考方案2】:

今天遇到同样的问题,发现安装11月CTP还不够,需要将项目配置下的平台工具集改为Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012)才能真正使用新功能,希望对大家有帮助。

【讨论】:

以上是关于错误“无法打开包含文件”,但它不包含在代码中的主要内容,如果未能解决你的问题,请参考以下文章

错误 C1083:无法打开包含文件:'crtdbg.h':没有这样的文件或目录

“错误 C1083:无法打开包含文件”但我有包含文件的路径

致命错误 C1083:无法打开包含文件:'boost/regex.hpp':没有这样的文件或目录

无法在 Windows 中安装 pycocotools:致命错误 C1083:无法打开包含文件:'io.h':没有此类文件或目录错误:

致命错误 C1083:无法打开包含文件:“openssl/opensslv.h”

在 Windows x64 中运行 Cython - 致命错误 C1083:无法打开包含文件:'basetsd.h':没有这样的文件或目录