0

SYSTEM: CentOS-5 with gcc-4.7.2 and boost-v1.54

PROBLEM: I try to adapt legacy (custom) objects for use with boost::geometry. More specifically I want to use boost geometry transformations and I follow this guide's code. My objects are slightly different than the "Q-objects" used there but the compilation error messages are similar so here I try to compile the code Boost provides.

The error appear when I apply the transformation.

int main(int argc, char* argv[])
{
    // create square (I know, I will be bored to deallocate)
    std::vector<QPoint*> points = {new QPoint(0, 0), new QPoint(0, 1),
                                   new QPoint(1, 1), new QPoint(1, 0),
                                   new QPoint(0, 0)};
    QLineString ls;
    ls.points = points;

    QRing ring;
    ring.lines.push_back(&ls);

    QPolygon square;
    square.exterior = &ring;


    // translation vector
    QPoint m(2, 3);
    namespace trans = boost::geometry::strategy::transform;
    trans::translate_transformer<QPolygon, QPolygon>
        dummy_translate(m.x, m.y);

    // translate square
    QPolygon square_r;
    boost::geometry::transform(square, square_r, dummy_translate); // COMPILATION ERROR!

    return 0;
}

COMPILATION ERROR MESSAGES:

[100%] Building CXX object CMakeFiles/test.dir/main.cpp.o
In file included from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_algobase.h:68:0,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/char_traits.h:41,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ios:41,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/istream:40,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/sstream:39,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/complex:47,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/type_traits/is_complex.hpp:12,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/type_traits.hpp:49,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/cs.hpp:19,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:19,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator.h: In instantiation of ‘class std::back_insert_iterator<QRing>’:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:158:9:   required from ‘static bool boost::geometry::detail::transform::transform_polygon::apply(const Polygon1&, Polygon2&, const Strategy&) [with Polygon1 = QPolygon; Polygon2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:310:64:   required from ‘bool boost::geometry::transform(const Geometry1&, Geometry2&, const Strategy&) [with Geometry1 = QPolygon; Geometry2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/users/ddakop/dev/misc/traits/main.cpp:29:65:   required from here
/cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator.h:438:7: error: no type named ‘value_type’ in ‘class QRing’
/cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator.h:445:7: error: no type named ‘value_type’ in ‘class QRing’
In file included from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:68:0,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp: In instantiation of ‘static bool boost::geometry::detail::transform::transform_polygon::apply(const Polygon1&, Polygon2&, const Strategy&) [with Polygon1 = QPolygon; Polygon2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:310:64:   required from ‘bool boost::geometry::transform(const Geometry1&, Geometry2&, const Strategy&) [with Geometry1 = QPolygon; Geometry2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/users/ddakop/dev/misc/traits/main.cpp:29:65:   required from here
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:165:9: error: no matching function for call to ‘boost::geometry::traits::resize<CustomPolygonRingRange>::apply(boost::geometry::interior_return_type<QPolygon>::type, std::size_t)’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:165:9: note: candidate is:
In file included from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/append.hpp:21:0,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/detail/assign_values.hpp:29,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/cartesian/cart_intersect.hpp:20,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/intersection.hpp:23,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/strategies.hpp:25,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:35,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/mutable_range.hpp:84:24: note: static void boost::geometry::traits::resize<Range>::apply(typename boost::geometry::traits::rvalue_type<Range>::type, std::size_t) [with Range = CustomPolygonRingRange; typename boost::geometry::traits::rvalue_type<Range>::type = CustomPolygonRingRange&; std::size_t = long unsigned int]
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/mutable_range.hpp:84:24: note:   no known conversion for argument 1 from ‘boost::geometry::interior_return_type<QPolygon>::type {aka CustomPolygonRingRange}’ to ‘boost::geometry::traits::rvalue_type<CustomPolygonRingRange>::type {aka CustomPolygonRingRange&}’
In file included from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:68:0,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:181:13: error: invalid initialization of non-const reference of type ‘QRing&’ from an rvalue of type ‘boost::iterator_facade<PolyRingIterator<__gnu_cxx::__normal_iterator<QRing**, std::vector<QRing*> >, QRing>, QRing, std::random_access_iterator_tag, QRing, long int>::reference {aka QRing}’
In file included from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_algobase.h:68:0,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/char_traits.h:41,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ios:41,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/istream:40,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/sstream:39,
                 from /cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/complex:47,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/type_traits/is_complex.hpp:12,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/type_traits.hpp:49,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/cs.hpp:19,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:19,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/gcc/gcc-4.7.2/dist/bin/../lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator.h:481:5: error: in passing argument 1 of ‘std::back_insert_iterator<_Container> std::back_inserter(_Container&) [with _Container = QRing]’
In file included from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/detail/assign_values.hpp:30:0,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/cartesian/cart_intersect.hpp:20,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/intersection.hpp:23,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/strategies.hpp:25,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:35,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp: In instantiation of ‘static void boost::geometry::detail::clear::polygon_clear<Polygon>::apply(Polygon&) [with Polygon = QPolygon]’:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:132:9:   required from ‘static void boost::geometry::dispatch::devarianted_clear<Geometry>::apply(Geometry&) [with Geometry = QPolygon]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:177:5:   required from ‘void boost::geometry::clear(Geometry&) [with Geometry = QPolygon]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:156:9:   required from ‘static bool boost::geometry::detail::transform::transform_polygon::apply(const Polygon1&, Polygon2&, const Strategy&) [with Polygon1 = QPolygon; Polygon2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:310:64:   required from ‘bool boost::geometry::transform(const Geometry1&, Geometry2&, const Strategy&) [with Geometry1 = QPolygon; Geometry2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/users/ddakop/dev/misc/traits/main.cpp:29:65:   required from here
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:52:9: error: no matching function for call to ‘boost::geometry::traits::clear<CustomPolygonRingRange>::apply(boost::geometry::interior_return_type<QPolygon>::type)’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:52:9: note: candidate is:
In file included from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/append.hpp:21:0,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/detail/assign_values.hpp:29,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/cartesian/cart_intersect.hpp:20,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/intersection.hpp:23,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/strategies/strategies.hpp:25,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/geometry.hpp:35,
                 from /cad2/Boost/install/boost-1.54.0/64/include/boost/geometry.hpp:17,
                 from /users/ddakop/dev/misc/traits/main.cpp:1:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/mutable_range.hpp:50:24: note: static void boost::geometry::traits::clear<Range>::apply(typename boost::geometry::traits::rvalue_type<Range>::type) [with Range = CustomPolygonRingRange; typename boost::geometry::traits::rvalue_type<Range>::type = CustomPolygonRingRange&]
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/mutable_range.hpp:50:24: note:   no known conversion for argument 1 from ‘boost::geometry::interior_return_type<QPolygon>::type {aka CustomPolygonRingRange}’ to ‘boost::geometry::traits::rvalue_type<CustomPolygonRingRange>::type {aka CustomPolygonRingRange&}’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/mutable_range.hpp: In instantiation of ‘static void boost::geometry::traits::clear<Range>::apply(typename boost::geometry::traits::rvalue_type<Range>::type) [with Range = CustomPolygonRingRange; typename boost::geometry::traits::rvalue_type<Range>::type = CustomPolygonRingRange&]’:
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:52:9:   required from ‘static void boost::geometry::detail::clear::polygon_clear<Polygon>::apply(Polygon&) [with Polygon = QPolygon]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:132:9:   required from ‘static void boost::geometry::dispatch::devarianted_clear<Geometry>::apply(Geometry&) [with Geometry = QPolygon]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/clear.hpp:177:5:   required from ‘void boost::geometry::clear(Geometry&) [with Geometry = QPolygon]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:156:9:   required from ‘static bool boost::geometry::detail::transform::transform_polygon::apply(const Polygon1&, Polygon2&, const Strategy&) [with Polygon1 = QPolygon; Polygon2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/algorithms/transform.hpp:310:64:   required from ‘bool boost::geometry::transform(const Geometry1&, Geometry2&, const Strategy&) [with Geometry1 = QPolygon; Geometry2 = QPolygon; Strategy = boost::geometry::strategy::transform::translate_transformer<QPolygon, QPolygon>]’
/users/ddakop/dev/misc/traits/main.cpp:29:65:   required from here
/cad2/Boost/install/boost-1.54.0/64/include/boost/geometry/core/mutable_range.hpp:52:9: error: ‘boost::remove_reference<CustomPolygonRingRange>::type’ has no member named ‘clear’
make[2]: *** [CMakeFiles/test.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2
Dimitris Dakopoulos
  • 563
  • 1
  • 4
  • 16

1 Answers1

1

Your main code uses m.x() as a function.

But m is a QPoint, a POD with an x as member (I assume), so that should be referred to as m.x without brackets.

Same with m.y()

Barend Gehrels
  • 967
  • 5
  • 8