我正在使用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.hpp
和array.hpp
的空main()并且构建良好) ,所以我正在寻找正确方向的推动:)。
答案 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>&);
无论如何,问题是因为您在代码中的某处混合了名称空间(std
和boost
)。见std::get
删除标题中的using namespace std;
和using namespace boost;
。