You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法编译CGAL官方示例代码:struct CGAL::Default无size_type类型错误

解决CGAL编译错误:no type named ‘size_type’ in ‘struct CGAL::Default’

你在使用Ubuntu 16.04自带的旧版本CGAL(通过apt安装的libcgal-dev)编译约束三角剖分代码时遇到了模板参数的问题,这个错误的根源在于旧版本CGAL对Triangulation_2的模板参数要求更严格。

错误原因分析

你代码中使用了CGAL::Default作为Constrained_Delaunay_triangulation_2的第二个模板参数(三角剖分数据结构),但在当前的CGAL版本中,CGAL::Default并没有定义size_type类型——而这个类型是Triangulation_2内部实现所必需的。新版本CGAL可能已经修复了这个问题,允许Default自动推导合适的类型,但旧版本需要显式指定数据结构类型。

解决方案:显式指定三角剖分数据结构

修改你的模板类型定义,把CGAL::Default替换为显式的Triangulation_data_structure_2类型,具体步骤如下:

  1. 先定义顶点基类、约束面基类,再组合成三角剖分数据结构:
#include <CGAL/Constrained_triangulation_plus_2.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Epeck.h>

// 定义顶点和约束面基类
typedef CGAL::Epeck K;
typedef CGAL::Triangulation_vertex_base_2<K> Vb;
typedef CGAL::Constrained_triangulation_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb, Fb> Tds;

// 使用显式的Tds代替CGAL::Default
typedef CGAL::Constrained_Delaunay_triangulation_2<K, Tds, CGAL::Exact_intersections_tag> CDT;
typedef CGAL::Constrained_triangulation_plus_2<CDT> CT;
  1. 确保编译命令链接CGAL依赖的数学库:
    旧版本CGAL依赖GMP和MPFR库,所以编译时需要加上链接参数:
g++ apply.cpp -lCGAL -lgmp -lmpfr -I/usr/local/include -o a.out

额外说明

如果你后续有机会升级CGAL版本(比如从源码编译安装最新版),这个问题会自动消失,因为新版本的CGAL::Default已经可以正确推导Triangulation_data_structure_2的类型。但在Ubuntu 16.04的旧环境下,显式指定数据结构是最直接的解决办法。

内容的提问来源于stack exchange,提问作者Jader Martins

火山引擎 最新活动