2014-04-01 30 views
0

系統:CentOS的-5使用gcc-4.7.2和提高-v1.54升壓幾何:傳統對象適應

問題:我努力去適應傳統的(自定義),用於提升使用的對象: :幾何。更具體地說,我想使用升壓幾何轉換,我遵循guidecode。我的對象與那裏使用的「Q對象」稍有不同,但是編譯錯誤消息是相似的,所以在這裏我嘗試編譯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 

回答

1

你的主代碼使用m.x()爲函數。

但是,m是一個QPoint,一個帶有x作爲成員的POD(我假設),所以應該被稱爲m.x沒有括號。

同m.y()

+0

你說得對。這是一個錯字,從實際執行中遺留下來。然而,大問題依然存在。 –