我在使用 boost get_rectangles 函数时遇到问题我已经看到了在 stackoverflow 上使用它的示例,但是我无法让它工作。
这是我正在使用的代码,我正在使用带有 boost 库 1.57 的 Visual Studio 2013
int main()
{
std::vector< boost::polygon::rectangle_data<int> > rects;
typedef boost::polygon::polygon_90_with_holes_data<int> Polygon90;
Polygon90 poly;
typedef boost::polygon::polygon_traits<Polygon90>::point_type MyPoint;
MyPoint pts[] = { boost::polygon::construct<MyPoint>(0, 0),
boost::polygon::construct<MyPoint>(0, 10),
boost::polygon::construct<MyPoint>(30, 10),
boost::polygon::construct<MyPoint>(30, 20),
boost::polygon::construct<MyPoint>(10, 20),
boost::polygon::construct<MyPoint>(10, 0) };
boost::polygon::set_points(poly, pts, pts + 6);
boost::polygon::get_rectangles(rects, poly );
}
我得到的错误是
>c:\lib\boost\1.57.0\boost\polygon\detail/rectangle_formation.hpp(261): error C2784: 'boost::rational<IntType> boost::abs(const boost::rational<IntType> &)' : could not deduce template argument for 'const boost::rational<IntType> &' from 'int'
1> C:\lib\boost\1.57.0\boost/rational.hpp(104) : see declaration of 'boost::abs'
1> c:\lib\boost\1.57.0\boost\polygon\polygon_90_set_data.hpp(180) : see reference to function template instantiation 'void boost::polygon::form_rectangles<output_container,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::pair<int,std::pair<int,int>>>>>,boost::polygon::rectangle_concept>(output_container &,iterator_type,iterator_type,boost::polygon::orientation_2d,rectangle_concept)' being compiled
1> with
1> [
1> output_container=std::vector<boost::polygon::rectangle_data<int>,std::allocator<boost::polygon::rectangle_data<int>>>
1> , iterator_type=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::pair<int,std::pair<int,int>>>>>
1> , rectangle_concept=boost::polygon::rectangle_concept
1> ]
1> c:\lib\boost\1.57.0\boost\polygon\polygon_90_set_concept.hpp(86) : see reference to function template instantiation 'void boost::polygon::polygon_90_set_data<int>::get_rectangles<output_container_type>(output_container &) const' being compiled
1> with
1> [
1> output_container_type=std::vector<boost::polygon::rectangle_data<int>,std::allocator<boost::polygon::rectangle_data<int>>>
1> , output_container=std::vector<boost::polygon::rectangle_data<int>,std::allocator<boost::polygon::rectangle_data<int>>>
1> ]
1> c:\lib\boost\1.57.0\boost\polygon\polygon_90_set_concept.hpp(86) : see reference to function template instantiation 'void boost::polygon::polygon_90_set_data<int>::get_rectangles<output_container_type>(output_container &) const' being compiled
1> with
1> [
1> output_container_type=std::vector<boost::polygon::rectangle_data<int>,std::allocator<boost::polygon::rectangle_data<int>>>
1> , output_container=std::vector<boost::polygon::rectangle_data<int>,std::allocator<boost::polygon::rectangle_data<int>>>
1> ]
1> TerrainDispatcher.cpp(173) : see reference to function template instantiation 'void boost::polygon::get_rectangles<std::vector<boost::polygon::rectangle_data<int>,std::allocator<_Ty>>,Polygon90>(output_container_type &,const polygon_set_type &)' being compiled
1> with
1> [
1> _Ty=boost::polygon::rectangle_data<int>
1> , output_container_type=std::vector<boost::polygon::rectangle_data<int>,std::allocator<boost::polygon::rectangle_data<int>>>
1> , polygon_set_type=Polygon90
1> ]