Я получаю длинную ошибку компилятора, когда я пытаюсь увеличить разностную функцию геометрии, в то время как объединение и пересечение, которые имеют тот же интерфейс и, вероятно, связаны с реализацией работы:
bg::unique_(OldPolygon, Node->Polygon, NodePolygon); // compiles
bg::intersection(OldPolygon, Node->Polygon, NodePolygon); // compiles
bg::difference(OldPolygon, Node->Polygon, NodePolygon); // dies
Первая ошибка:
boost/range/size.hpp:32:13: error: invalid operands to
binary expression ('
boost::reverse_iterator<
__gnu_cxx::__normal_iterator<
const GraphPoint *,
std::vector<
GraphPoint,
std::allocator<GraphPoint>
>
>
>' and 'int')
BOOST_ASSERT( (boost::end(rng) - boost::begin(rng)) >= 0 &&
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кажется, по какой-то причине разница итератора возвращает обратный итератор вместо расстояния ...
Типы объявлены как:
namespace bg = boost::geometry;
struct GraphPoint
{
int x, y;
GraphPoint(int x, int y) : x(x), y(y) { }
GraphPoint() : x(0), y(0) { }
GraphPoint(const GraphPoint &other) : x(other.x), y(other.y) { }
bool operator ==(const GraphPoint &other) const
{
return x == other.x && y == other.y;
}
};
BOOST_GEOMETRY_REGISTER_POINT_2D(GraphPoint, int, bg::cs::cartesian, x, y)
typedef bg::model::polygon<GraphPoint> Polygon;
typedef Polygon::ring_type Ring;
typedef bg::model::multi_polygon<Polygon> MultiPolygon;
MultiPolygon OldPolygon;
struct Node
{
Polygon Polygon;
}
MultiPolygon NodePolygon;
Полная ошибка в здесь если кто-то любит копать.
Как мне сделать этот компилятор?