Построение шаблонного типа для CGAL c++

Итак, у меня есть следующее, что должно создать тип треугольника Делоне для CGAL:

std::vector<Point> points = createPoints() // Fills points, This works. 
Delaunay dt(points.begin(), points.end());

Согласно этому вопросу и руководству здесь. Это должно работать, однако я получаю следующую ошибку:

[100%] Building CXX object src/utilities/TriangulationVolumeCalculation/CMakeFiles/calculateVolumeDifference.dir/CalculateVolumeDifference.cpp.o
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp: In function ‘void fillDelaunay(Delaunay&, std::vector<std::vector<double> >)’:
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:31:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp: In function ‘int main(int, char**)’:
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:50:27: error: no matching function for call to ‘CGAL::Delaunay_triangulation_2<CGAL::Projection_traits_xy_3<CGAL::Epick> >::Delaunay_triangulation_2(std::vector<CGAL::Point_3<CGAL::Epick> >::iterator&, std::vector<CGAL::Point_3<CGAL::Epick> >::iterator&)’
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:50:27: note: candidates are:
In file included from /home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:3:0:
/usr/local/include/CGAL/Delaunay_triangulation_2.h:89:3: note: CGAL::Delaunay_triangulation_2<Gt, Tds>::Delaunay_triangulation_2(const CGAL::Delaunay_triangulation_2<Gt, Tds>&) [with Gt = CGAL::Projection_traits_xy_3<CGAL::Epick>; Tds = CGAL::Triangulation_data_structure_2<CGAL::Triangulation_vertex_base_2<CGAL::Projection_traits_xy_3<CGAL::Epick>, CGAL::Triangulation_ds_vertex_base_2<void> >, CGAL::Triangulation_ds_face_base_2<void> >]
/usr/local/include/CGAL/Delaunay_triangulation_2.h:89:3: note:   candidate expects 1 argument, 2 provided
/usr/local/include/CGAL/Delaunay_triangulation_2.h:86:2: note: CGAL::Delaunay_triangulation_2<Gt, Tds>::Delaunay_triangulation_2(const Gt&) [with Gt = CGAL::Projection_traits_xy_3<CGAL::Epick>; Tds = CGAL::Triangulation_data_structure_2<CGAL::Triangulation_vertex_base_2<CGAL::Projection_traits_xy_3<CGAL::Epick>, CGAL::Triangulation_ds_vertex_base_2<void> >, CGAL::Triangulation_ds_face_base_2<void> >]
/usr/local/include/CGAL/Delaunay_triangulation_2.h:86:2: note:   candidate expects 1 argument, 2 provided
make[2]: *** [src/utilities/TriangulationVolumeCalculation/CMakeFiles/calculateVolumeDifference.dir/CalculateVolumeDifference.cpp.o] Error 1
make[1]: *** [src/utilities/TriangulationVolumeCalculation/CMakeFiles/calculateVolumeDifference.dir/all] Error 2
make: *** [all] Error 2

В руководстве указано, что:

 Precondition:  The value_type of first and last is Point.

Где first и last - это начальный и конечный итератор.

РЕДАКТИРОВАТЬ: я решил это, сделав это:

Delaunay dt;
dt.insert(points.begin(), points.end());

Несмотря на то, что это исправлено, объявления типа для требуемого итератора такие же, как и в руководстве. Почему он не работает в конструкторе, а не в функции insert.


person Fantastic Mr Fox    schedule 13.06.2013    source источник
comment
Можете ли вы скопировать и вставить цепочку определений типов, которые используются для определения типа Delaunay?   -  person lrineau    schedule 14.06.2013


Ответы (2)


Вы случайно не используете старую версию CGAL? Если мне не изменяет память, этот конструктор из диапазона был представлен позже, чем функция insert(). Ну, просто проверьте код.

person Sylvain Pion    schedule 13.06.2013
comment
Это действительно было введено в 4.2 - person sloriot; 13.06.2013
comment
Я использую последнюю версию GAL, кроме того, не будет ли компилятор жаловаться на то, что конструктор такого типа не существует, а не на неправильные входные данные? - person Fantastic Mr Fox; 14.06.2013
comment
Пожалуйста, дважды проверьте, какую версию CGAL вы используете. Чтобы код работал, он должен быть 4.2. - person Sylvain Pion; 15.06.2013
comment
Да, вы были правы, у меня CGAL версии 4.1, интересно, как это произошло. - person Fantastic Mr Fox; 17.06.2013

Проблема, вероятно, в том, что ваш класс Point не имеет необходимых методов, чтобы быть параметром шаблона Delaunay_triangulation_2 (который, я думаю, вы использовали для определения класса Delaunay)

Каково определение классов Delaunay и Point?

Полезные примеры можно найти здесь: http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_2/Chapter_main.html

person Boris Dalstein    schedule 13.06.2013
comment
No point не является частью библиотеки CGAL. Это такое определение типа: typedef K::Point_3 Point; - person Fantastic Mr Fox; 13.06.2013
comment
Ладно, увидел твою правку. Тогда я понятия не имею, почему это работает во вставке, а не в конструкторе. Однако в документации указано понятие PointInputIterator для insert() и InputIterator для конструктора. Может быть, есть тонкая разница, но я не могу помочь вам в этом. - person Boris Dalstein; 13.06.2013