切换到Boost 1.64时std :: get冲突

时间:2017-09-01 17:45:05

标签: c++ boost

我正在使用gcc 6.2(使用-std = c ++ 14)。我有一个很大的项目,建立在Boost 1.62之上,毫无问题。当我切换到Boost 1.64时,我收到此错误:

.../include/boost/property_map/property_map.hpp:133:11: error: ‘template<long unsigned int Idx, class T, long unsigned int N> con 
    st T& std::get(const boost::array<T, N>&)’ conflicts with a previous declaration 
      using ::get; 
              ^~~ 

...include//boost/array.hpp:429:13: note: previous declaration ‘template<long unsigned int Idx, class T, long unsigned int N> con 
    st T& boost::get(const boost::array<T, N>&)’ 
       const T &get(const boost::array<T,N> &arr) BOOST_NOEXCEPT { 
                ^~~ 

不幸的是我无法通过一个简单的例子重现问题(不确定问题可能是什么,我创建了一个包含property_map.hpparray.hpp的空main()并且构建良好) ,所以我正在寻找正确方向的推动:)。

2 个答案:

答案 0 :(得分:3)

确保查找导入单个函数的语句:

using std::get;

而不是仅导入包含get()的整个命名空间:

using namespace std;

答案 1 :(得分:1)

这是因为boost在array.hpp vesion 1.64中引入了模板功能,array.hpp vesion 1.62中没有 (这就是为什么你之前没有得到这个编译器错误的原因)

template<typename T, std::size_t N, std::size_t Idx> 
    T boost::get(const array<T, N>&);

无论如何,问题是因为您在代码中的某处混合了名称空间(stdboost)。见std::get

删除标题中的using namespace std;using namespace boost;