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

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

本文关键字:错误 hpp streambuf Boost-iostream 包含 filtering C++      更新时间:2023-10-16

我一直在使用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

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

/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后,问题已解决。