繁体   English   中英

C ++ Boost-iostream:包含filtering_streambuf.hpp时出现的神秘错误

[英]C++ Boost-iostream: mysterious error when including filtering_streambuf.hpp

我一直在使用boost iostream库(版本1.65),主要使用以下标题: <boost/iostreams/filtering_streambuf.hpp> ,没有任何问题。

之后我将另一个名为cpprest的库添加到我的项目中( https://github.com/Microsoft/cpprestsdk )。 我在我的cmake中收到了这个警告:

usr/bin/ld: warning: libboost_system.so.1.58.0, needed by /usr/lib/libcpprest.so, may conflict with libboost_system.so.1.65.0

在包含boost标头之后,我得到了这个神秘的编译错误:

/usr/local/include/boost/iostreams/detail/access_control.hpp: In constructor ‘boost::iostreams::detail::prot_<U>::prot_(V)’:
/usr/local/include/boost/iostreams/detail/access_control.hpp:37:43: error: class ‘boost::iostreams::detail::prot_<U>’ does not have any field named ‘v’
         template<typename V> prot_(V v) : U(v) { }

这是由Boost 1.58(由cpprest使用)和1.65的不兼容引起的吗? 或者它是Boost iostream中的一个错误?

我实际上将我的提升等级降至1.58,但我仍然看到同样的错误。

是的,这看起来像版本冲突。

请注意,由于它是access_control的实现细节的编译错误,很可能是由于不同的编译器标志/配置导致编译不同的代码。 即使所有包含来自同一个Boost版本,这也是一个问题

特别是,代码的某些部分可能正在对目标平台做出(不同的)假设。

我发现这是定义的问题。 Microsoft代码定义宏调用U(x) ,Boost代码使用U作为模板变量。 在导入Microsoft代码标头之前添加#define _TURN_OFF_PLATFORM_STRING后,问题得以解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM