c ++ 11 — Метод сортировки векторной сортировки C ++ не компилируется, возвращает ожидаемое выражение

Я начинаю работать с cgal, и я только что скачал пример кода, чтобы начать практиковать. Проблема в том, что когда я пытаюсь скомпилировать код, он возвращает:

ConvexHull.cpp:275:40: error: expected expression
sort(points.begin(), points.end(), [p] (Point_2 a, Point_2 b) -> int {
^
1 error generated.
make[2]: *** [CMakeFiles/exec.e.dir/ConvexHull.cpp.o] Error 1
make[1]: *** [CMakeFiles/exec.e.dir/all] Error 2
make: *** [all] Error 2

Когда я смотрю на код, все кажется нормально:

Point_2 p = *(polygon.bottom_vertex());

sort(points.begin(), points.end(), [p] (Point_2 a, Point_2 b) -> int {
Vector_2 v1(a, p);
Vector_2 v2(b, p);

return v1.direction() <= v2.direction();
});

Это действительно неправильно?
Я использую неправильный компилятор (по умолчанию Clang 3.1.0) Я что-то пропустил?

Любая помощь с благодарностью

Кстати: я использую OSX Lion для разработки, и единственное, что я установил, это cgal (использующий homebrew) и его зависимости. Для компиляции я запускаю:

cd path/to/folder
cgal_create_CMakeLists -c Qt4:Core:GMP:MPFR:Boost -s exec.e
cmake -DCGAL_DIR=$HOME/CGAL-4.2 -DCMAKE_BUILD_TYPE=Debug
make

РЕДАКТИРОВАТЬ

Мне удалось установить gcc-4.8 и g ++ — 4.8 с помощью homebrew. Чем я запустил команду cmake следующим образом:

cmake -DCGAL_DIR=$HOME/CGAL-4.2 -DCMAKE_CXX_COMPILER=g++-4.8 -DCMAKE_CC_COMPILER=gcc-4.8

Даже не нужно было указывать c++11 флаг. Он сгенерировал исполняемый файл, но когда я запускаю его, используя ./exec.e это сегфо Segmentation fault: 11, Я очень разочарован тем, как тяжело это оказывается.

РЕДАКТИРОВАТЬ 2

Я отказался от использования MacOS. Я был в состоянии легко скомпилировать и запустить все необходимые библиотеки и CGALна Linux с помощью GCC-4.7,

1

Решение

Пример кода, который вы показали, имеет функцию языка C ++ 11, которая называется лямбда-выражения. Большинство компиляторов не работают в режиме C ++ 11 по умолчанию. Чтобы явно позволить им сделать это, поместите в свой CMakeLists.txt

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

и восстановить, перестроить и перезапустить все, чтобы ваша программа работала правильно.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector