我正在使用Visual Studio 2017构建LucenePlusPlus,后者依次使用boost / dynamic_bitset。
LucenePlusPlus中的以下代码
const uint64_t* BitSet::getBits() {
return bitSet.empty() ? NULL : static_cast<const uint64_t*>(&bitSet.m_bits[0]);
}
生成以下致命的编译器错误:
1>g:\luceneplusplus\src\core\util\bitset.cpp(20): error C2248: 'boost::dynamic_bitset<uint64_t,std::allocator<Block>>::m_bits': cannot access private member declared in class 'boost::dynamic_bitset<uint64_t,std::allocator<Block>>'
1> with
1> [
1> Block=uint64_t
1> ]
有什么建议吗?
我已经跟踪了boost 1_75_0的代码,并且看到了一个定义,可以有条件地保留对朋友的访问权限:
#if defined(BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS)
#define BOOST_DYNAMIC_BITSET_PRIVATE public
#else
#define BOOST_DYNAMIC_BITSET_PRIVATE private
#endif
因此,看起来您应该能够添加-DBOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS
到编译器定义中以解决此问题。
实际上,我的LucenePlusPlus树已经在第107行的include / config_h / Config.h。中包含了它:
#define BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS
以前(“重建的cmake构建系统”)显然来自include / Config.h.cmake,该位置始终存在,自2010年以来一直存在:
也许您不包括包含配置的必需标头?还要检查任何干扰的预编译头设置。
如果您boost/dynamic_bitset.hpp
在任何时候都包括了LucenePlusPlus标头,那么您将使用错误的配置运行。
如果您未检测到它,则尤其糟糕,因为这会违反ODR规则
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句