C ++ Vector Sort方法无法编译,返回预期的表达式

时间:2013-06-21 05:27:01

标签: c++ c++11 lambda cmake cgal

我开始使用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(使用自制程序)及其依赖项。要编译我运行:

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。比我运行这样的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 个答案:

答案 0 :(得分:3)

您展示的代码示例具有名为lambda expressions的C ++ 11语言功能。默认情况下,大多数编译器不以C ++ 11模式运行。要明确让他们这样做,请放入CMakeLists.txt

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

并重新生成,重建并重新运行所有内容以使程序正常运行。