Я начинаю работать с 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
, Я очень разочарован тем, как тяжело это оказывается.
Я отказался от использования MacOS. Я был в состоянии легко скомпилировать и запустить все необходимые библиотеки и CGAL
на Linux с помощью GCC-4.7
,
Пример кода, который вы показали, имеет функцию языка C ++ 11, которая называется лямбда-выражения. Большинство компиляторов не работают в режиме C ++ 11 по умолчанию. Чтобы явно позволить им сделать это, поместите в свой CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
и восстановить, перестроить и перезапустить все, чтобы ваша программа работала правильно.
Других решений пока нет …