CGAL 无法识别类型
CGAL doesn't recognize type
对于我的论文项目,我依赖于另一个学生一年前写的一堆CGAL代码。不幸的是,由于出现错误,我无法编译代码。这些错误可能不是以前的学生经历过的,所以它们可能与我的设置比代码本身更相关,但我不知道直接原因是什么。
错误在文件CCBSegmentCalculator.h中。代码如下:
#pragma once
#include "bezier_arrangement.h"
//Circulates around a PL_Arrrangement CCB, visiting the points between the segments that make up the CCB
// (so smaller-scale than the build-in iterator that only visits the PL_Arrangement vertices)
// --- Could be used in more places than it is now, e.g., in the SVGHandler
class CCBSegmentCirculator
{
public:
CCBSegmentCirculator(PL_Arrangement::Ccb_halfedge_const_circulator ccbCirculator);
const CCBSegmentCirculator& next();
PL_Point operator*();
PL_Point get(); // same as operator*
bool operator==(const CCBSegmentCirculator &other) const;
private:
const PL_Arrangement::Ccb_halfedge_const_circulator halfedgesBegin;
PL_Arrangement::Ccb_halfedge_const_circulator halfedge;
//Depending on this boolean ...
bool forward;
//... we are either using these forward iterators ...
// -> in which case the 'current' point is segment.source
Polyline::Segment_const_iterator segment;
Polyline::Segment_const_iterator segmentEnd;
//... or these reverse iterators
// -> in which case the 'current' point is segmentReverse.target
Polyline::Segment_const_reverse_iterator segmentReverse;
Polyline::Segment_const_reverse_iterator segmentReverseEnd;
void initHalfedge();
};
文件"bezier_arrangement.h"具有以下代码:
#pragma once
#include <CGAL/Cartesian.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_Bezier_curve_traits_2.h>
#include <CGAL/Arrangement_2.h>
#include <CGAL/Arrangement_with_history_2.h>
#include <CGAL/Arr_extended_dcel.h>
#include <CGAL/Iso_rectangle_2.h>
#include <CGAL/Arr_walk_along_line_point_location.h>
#include <CGAL/Arr_observer.h>
//#include <CGAL/basic.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Arr_segment_traits_2.h>
#include <CGAL/Arr_polyline_traits_2.h>
struct FaceData
{
FaceData ()
{
colored = false;
solved = false;
};
bool colored = false;
bool solved = false;
};
//// Bezier curve traits ////
typedef CGAL::CORE_algebraic_number_traits Nt_traits;
typedef Nt_traits::Rational NT;
typedef Nt_traits::Rational Rational;
typedef Nt_traits::Algebraic Algebraic;
//Simple_cartesian = for easier debugging, no ref counting, values directly in objects
typedef CGAL::Cartesian<Rational> Kernel;
typedef CGAL::Cartesian<Algebraic> Alg_kernel;
//typedef Kernel::Point_2 Rat_Point;
typedef CGAL::Arr_Bezier_curve_traits_2<Kernel, Alg_kernel, Nt_traits> Traits;
typedef Traits::Curve_2 Bezier;
typedef Traits::Point_2 Point;
typedef Kernel::Iso_rectangle_2 BoundingBox;
typedef CGAL::Arr_face_extended_dcel<Traits, FaceData> Dcel;
typedef CGAL::Arrangement_with_history_2<Traits, Dcel> Arrangement; //Not really used anymore, because of crashes/problems/bugs
//// Polyline traits ////
// Instantiate the traits class using a user-defined kernel
// and Segment_traits_2.
typedef CGAL::Exact_predicates_exact_constructions_kernel PL_Kernel;
typedef CGAL::Arr_segment_traits_2<PL_Kernel> Segment_traits;
typedef CGAL::Arr_polyline_traits_2<Segment_traits> PL_traits;
// Identical instantiation can be achieved using the default Kernel:
// typedef CGAL::Arr_polyline_traits_2<> Geom_traits_2;
typedef PL_traits::Point_2 PL_Point;
typedef PL_traits::Segment_2 Segment;
typedef PL_traits::Curve_2 Polyline;
typedef CGAL::Arr_extended_dcel<PL_traits, bool/*not used*/, double, FaceData> PL_Dcel;
typedef CGAL::Arrangement_with_history_2<PL_traits, PL_Dcel> PL_Arrangement; //This is now the only type of arrangement that we actually use
//Handles
typedef PL_Arrangement::Vertex_const_handle Vertex_handle;
typedef PL_Arrangement::Halfedge_const_handle Halfedge_handle;
typedef PL_Arrangement::Curve_const_handle Curve_handle;
//Point location
typedef CGAL::Arr_walk_along_line_point_location<PL_Arrangement> PointLocationAlg;
typedef CGAL::Arr_point_location_result<PL_Arrangement>::Type PointLocationResult;
//Less function to use for (vertex/halfedge/face) handle sets
template <class Handle> struct HandleLess
{
bool operator()(Handle a, Handle b)
{
return (a.ptr() - b.ptr() < 0);
}
};
typedef std::set<Vertex_handle, HandleLess<Vertex_handle>> VertexHandleSet;
//Arrangement observer that keeps the face colours correct
class FaceColorObserver : public CGAL::Arr_observer<PL_Arrangement>
{
private:
bool coloredBeforeMerge;
public:
FaceColorObserver(PL_Arrangement& arrangement) :
CGAL::Arr_observer<PL_Arrangement>(arrangement)
{}
virtual void after_split_face(Face_handle oldFace, Face_handle newFace, bool)
{
newFace->data().colored = oldFace->data().colored;
}
virtual void before_merge_face(Face_handle face1, Face_handle face2, Halfedge_handle)
{
//The assumption is that only same-color faces get merged
CGAL_precondition(face1->data().colored == face2->data().colored);
coloredBeforeMerge = face1->data().colored;// && face2->data().colored;
}
virtual void after_merge_face(Face_handle newFace)
{
newFace->data().colored = coloredBeforeMerge;
}
};
//Arrangement of line segments
typedef CGAL::Arrangement_2<Segment_traits> Seg_Arrangement;
我遇到的错误与以下事实有关:CGAL认为定义的Polyline类型没有成员Segment_const_iterator
,或者根本无法正确识别该类型。我不确定,因为它被翻译成内部CGAL类型。我得到的错误是:
Error C2039 'Segment_const_iterator': is not a member of 'CGAL::internal::Polycurve_2<SubcurveType_2,PointType_2>' CurvedNonograms c:usersdemeessiasdocuments1. studie .masterthesiscurvednonograms-codecurvednonogramscurvednonogramsccbsegmentcirculator.h 39
对于包含segment
、segmentEnd
、segmentReverse
和segmentReverseEnd
的定义的行重复。
根据文档,Curve_2
应该有一个Segment_const_iterator
的定义。
再一次,错误可能不在代码本身,而是在我的CGAL构建/链接中。重新安装CGAL并没有帮助,我很确定我已经在相关的地方链接了它,但这部分构建软件并不是我的强项,所以我可能不知道所有相关的地方。
编辑:输出中给出的第一个错误是:
c:usersdemeessiasdocuments1. studie .masterthesiscurvednonograms-codecurvednonogramscurvednonogramssvghandler.cpp(94): error C2039: 'begin_segments': is not a member of 'CGAL::_Curve_data_ex<CGAL::internal::X_monotone_polycurve_2<CGAL::Arr_segment_2<Kernel_>,CGAL::Point_2<Kernel_>>,CGAL::_Unique_list<Data_>>' 2> with 2> [ 2> Kernel_=PL_Kernel, 2> Data_=CGAL::internal::Polycurve_2<CGAL::Arr_segment_2<PL_Kernel>,CGAL::Point_2<CGAL::Epeck>> * 2> ]
这与上面显示的代码文件不同,因为代码中有更多错误,但所有错误似乎都源于类似的问题。还有一些形式的警告:
2>c:program files (x86)microsoft visual studio 14.0vcincludexutility(313): warning C4503: '__LINE__Var': decorated name length exceeded, name was truncated
将CCBSegmentCalculator.h添加到另一个项目中只进行编译会出现以下错误:
Severity Code Description Project File Line Suppression State
Error (active) class "CGAL::internal::Polycurve_2<CGAL::Arr_segment_2<CGAL::Exact_predicates_exact_constructions_kernel>, CGAL::Point_2<CGAL::Epeck>>" has no member "Segment_const_iterator" CurvedNonogramsGenerator c:UsersDeMeessiasDocuments1. Studie .MasterThesisCodeCurvedNonogramsGeneratorCurvedNonogramsGeneratorCCBSegmentCirculator.h 28
Error (active) class "CGAL::internal::Polycurve_2<CGAL::Arr_segment_2<CGAL::Exact_predicates_exact_constructions_kernel>, CGAL::Point_2<CGAL::Epeck>>" has no member "Segment_const_iterator" CurvedNonogramsGenerator c:UsersDeMeessiasDocuments1. Studie .MasterThesisCodeCurvedNonogramsGeneratorCurvedNonogramsGeneratorCCBSegmentCirculator.h 29
Error (active) class "CGAL::internal::Polycurve_2<CGAL::Arr_segment_2<CGAL::Exact_predicates_exact_constructions_kernel>, CGAL::Point_2<CGAL::Epeck>>" has no member "Segment_const_reverse_iterator" CurvedNonogramsGenerator c:UsersDeMeessiasDocuments1. Studie .MasterThesisCodeCurvedNonogramsGeneratorCurvedNonogramsGeneratorCCBSegmentCirculator.h 32
Error (active) class "CGAL::internal::Polycurve_2<CGAL::Arr_segment_2<CGAL::Exact_predicates_exact_constructions_kernel>, CGAL::Point_2<CGAL::Epeck>>" has no member "Segment_const_reverse_iterator" CurvedNonogramsGenerator c:UsersDeMeessiasDocuments1. Studie .MasterThesisCodeCurvedNonogramsGeneratorCurvedNonogramsGeneratorCCBSegmentCirculator.h 33
Error C2039 'Segment_const_iterator': is not a member of 'CGAL::internal::Polycurve_2<SubcurveType_2,PointType_2>' CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 28
Error C3646 'segment': unknown override specifier CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 28
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 28
Error C2039 'Segment_const_iterator': is not a member of 'CGAL::internal::Polycurve_2<SubcurveType_2,PointType_2>' CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 29
Error C3646 'segmentEnd': unknown override specifier CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 29
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 29
Error C2039 'Segment_const_reverse_iterator': is not a member of 'CGAL::internal::Polycurve_2<SubcurveType_2,PointType_2>' CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 32
Error C3646 'segmentReverse': unknown override specifier CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 32
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 32
Error C2039 'Segment_const_reverse_iterator': is not a member of 'CGAL::internal::Polycurve_2<SubcurveType_2,PointType_2>' CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 33
Error C3646 'segmentReverseEnd': unknown override specifier CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 33
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int CurvedNonogramsGenerator c:usersdemeessiasdocuments1. studie .masterthesiscodecurvednonogramsgeneratorcurvednonogramsgeneratorccbsegmentcirculator.h 33
将Segment_const_iterator和Segment_const _reverse_iterator分别替换为Subcurve_const_isterator和Subcurve-const_reverse_idterator。
您可能需要分别用subservers_begin()和subservers_end()替换begin_segments()和end_segments。
在版本(我认为)4.2中,我们对代码进行了重大更改。其中一个变化是扩展了arr_polyline_traits_2 traits类支持的多段线的定义。现在,多段线可以是不一定是线段的线性曲线链。例如,它可以有一条或两条光线作为第一块和最后一块,甚至可以有一行。(官方称,一段多段线可以是可以由两点构造的任何曲线)。
- std::visit无法识别类型
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 我的头文件 DNode 中的我的数据类型未被识别为数据类型
- 无法在VSCode中设置C++调试;无法识别调试类型
- C++ 编译错误:gnu_printf是无法识别的格式函数类型
- C++将 wwn 字符串转换为识别为十六进制的数据类型
- 编写完整专业化以识别void类型的问题
- 无法识别协变返回类型
- 我该如何允许类型的对象非专业化并在不使用指针的情况下识别何时是这种情况
- 为什么模板<类型名...>不能通过模板<模板类型名>识别为可实例化<typename>?
- CGAL 无法识别类型
- 为什么我的Visual Studio 2017编译器无法识别C++17类型推导指南
- 当例外处理时,类型识别如何工作
- 无法识别初始化类型
- 从基类识别派生的类类型
- ActiveMQCPP - 识别测量类型
- 运算符 + 无法识别类型
- 无法识别'regex'类型
- 嵌套成员类型识别
- C++运行时数据类型识别并避免切换大小写