С++ 11 и форсированная геометрия

Я начал работать с С++ 11 и попытался запустить пример кода с геометрией повышения.

#include <iostream>

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>

BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)


int main()
{
    typedef boost::tuple<double, double> point;
    typedef boost::geometry::model::polygon<point> polygon;

    polygon poly;
    boost::geometry::read_wkt("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"
        ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))", poly);

    polygon hull;
    boost::geometry::convex_hull(poly, hull);

    using boost::geometry::dsv;
    std::cout
        << "polygon: " << dsv(poly) << std::endl
        << "hull: " << dsv(hull) << std::endl
        ;


    return 0;
}

но я получил следующие ошибки

/boost/include/boost/geometry/algorithms/detail/recalculate.hpp: In statischer Elementfunktion »static void boost::geometry::detail::recalculate::polygon_to_polygon::apply(Polygon1&,

const Polygon2&, const Strategy&)«: boost/include/boost/geometry/algorithms/detail/recalculate.hpp:145:24: Fehler: »it_source« не определен

boost/include/boost/geometry/algorithms/detail/recalculate.hpp:146:24: Fehler: »it_dest« is not defined

Кто-нибудь знает, почему это не работает?

Сорри, я забыл добавить свою систему. Я использую 64-битную Mint 13 с GCC 4.6.3 и Boost 1.55.

Спасибо за вашу помощь


person Hunk    schedule 24.07.2014    source источник
comment
У меня работает: boost 1.54, gcc 4.7.2   -  person PSIAlt    schedule 24.07.2014
comment
Всегда, когда вы спрашиваете об ошибке (компиляция или ссылка или что-то еще), хорошо написать, компилятор (включая версию и, если используется библиотека не по умолчанию, имя) и платформу, когда возникает ошибка (например: GCC 4.9.0 32-разрядная версия, Windows 8.1 или GCC 4.9.0 32-разрядная версия с libc++, Windows 8.1 и т. д.)   -  person NetVipeC    schedule 24.07.2014
comment
Я бы посоветовал сначала обновить. 4.6.3 действительно старая.   -  person sehe    schedule 25.07.2014
comment
хорошо, полезно обновить gcc 4.8 с помощью ppa askubuntu.com/questions/271388/. Или я должен использовать gcc 4.7, который находится в системе пакетов Ubuntu? И спасибо за вашу помощь   -  person Hunk    schedule 25.07.2014


Ответы (1)


Видимо твой компилятор

  • вызов С++ 11
  • неправильно настроен

таким образом, что BOOST_AUTO_TPL не работает:

    BOOST_AUTO_TPL(it_source, boost::begin(rings_source));
    BOOST_AUTO_TPL(it_dest, boost::begin(rings_dest));

В компиляторе С++ 11 он расширится до

auto it_source = boost::begin(rings_source);
auto it_dest = boost::begin(rings_dest);

Однако, если вы скомпилируете это в режиме С++ 03 (например, без -std=c++11 в gcc/clang), вы можете получить ошибку, что it_source или it_dest не являются допустимыми типами (кроме того, остальные операторы/объявления искажены)

person sehe    schedule 24.07.2014
comment
как я должен определить свой компилятор? Я делаю только gcc -std=c++0x main.cpp -I ~/boost/include. Без геометрии повышения я могу использовать функции С++ 11, такие как auto - person Hunk; 25.07.2014
comment
@Hunk Обычно все это делается во время компиляции, автоматически. Однако возможно, что подпрограммы обнаружения ошибаются на вашей платформе. Вы можете просмотреть поддерживаемые версии компилятора для Boost 1.55 или попробовать обновить свой инструментарий. - person sehe; 25.07.2014
comment
привет, я обновил gcc до 4.9.1 и получил ту же ошибку. У тебя есть идеи ? в качестве флага я использую gcc -std=c++11 или -std=c++0x то же самое или? - person Hunk; 28.07.2014