【问题标题】:Issue with Boost 1.64 and Visual Studio 2017Boost 1.64 和 Visual Studio 2017 的问题
【发布时间】:2017-08-31 21:16:28
【问题描述】:

我正在将库升级到 MSVC 141 并迁移到 Visual Studio 2017。

我已经下载了最新的 Boost 库 (boost_1_64_0_b2-msvc-14.1-64.exe)。在构建代码时,我收到此错误:

...\boost\move\detail\type_traits.hpp(757):错误 C2187:语法错误: ')' 在这里出乎意料...\boost\move\detail\type_traits.hpp(763): 注意:参见类模板实例化的参考 'boost::move_detail::is_copy_constructible' 正在编译

在提到的标头中,BOOST_MOVE_TT_CXX11_IS_COPY_CONSTRUCTIBLE 已定义,但最新的 MSVC 不理解随附的代码。

取消定义此宏会有所帮助,但是否有更好的解决方案来解决此问题?这是什么原因?

【问题讨论】:

  • 我遇到了同样的错误,我是 C++ 新手,所以我真的不知道如何解决它。同时,我在导入ptree.hpp之前添加了以下define #define BOOST_NO_CXX11_DECLTYPE 我确定有更好的方法,我只是不知道是哪一个:)
  • 哦,我正在使用 Boost v1.63
  • 在我的例子中,U 被定义为一个宏(由 cpprestsdk 定义),与 Boost 代码冲突。我只需要先移动包含 Boost 头文件。

标签: c++ visual-c++ boost


【解决方案1】:

按照here 的建议,在每次包含 cpprest 标头之后或在包含 boost 标头之前取消定义宏 U

例子:

#include <cpprest/http_client.h>
#undef U

【讨论】:

  • 这或在包含 cpprest 标头之前包含 boost 标头也可以。
  • 这有点晦涩,但如果有人使用 MetaTrader 4 Manager API,这也是该库的问题。 #include "MT4ManagerAPI.h" #undef U //与 boost 冲突
  • 由于可能与其他库发生冲突(这肯定可能编码不佳),因此 Boost 使用不太可能发生冲突的变量名会更好。
【解决方案2】:

需要包含 -

#define _TURN_OFF_PLATFORM_STRING

"#include cpprest/details/basic_types.h>"

....

见: https://github.com/Microsoft/vcpkg/issues/836

【讨论】:

  • 欢迎堆栈溢出。请考虑使用提供的空间来包含链接中的相关信息。也请考虑为您的命令/代码使用代码格式
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2018-09-21
  • 2018-06-09
  • 2018-06-10
相关资源
最近更新 更多