gpt4 book ai didi

c++ - boost 几何 : legacy objects adaptation

转载 作者:行者123 更新时间:2023-11-28 06:58:57 28 4
gpt4 key购买 nike

系统:带有 gcc-4.7.2 和 boost-v1.54 的 CentOS-5

问题:我尝试调整遗留(自定义)对象以与 boost::geometry 一起使用。更具体地说,我想使用 boost 几何变换,我遵循这个 guidecode .我的对象与那里使用的“Q-objects”略有不同,但编译错误消息相似,所以我在这里尝试编译 Boost 提供的代码。

应用转换时出现错误。

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;
}

编译错误信息:

[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

最佳答案

您的主代码使用 m.x() 作为函数。

但是 m 是一个 QPoint,一个以 x 作为成员的 POD(我假设),所以它应该被称为不带括号的 m.x。

与 m.y() 相同

关于c++ - boost 几何 : legacy objects adaptation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22782104/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com