[英]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.