簡體   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