2013-06-13 2 views
1

Так у меня есть следующий, которые должны создать тип треугольника Делона для CGAL:Построение Templated типа для CGAL C++

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

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

[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. 

Где первый и последний начало и конец итератора.

EDIT: Я решил его сделать это:

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

Хотя это фиксируется, заявление типа для требуемого итератора одинаковы в соответствии с инструкцией. Зачем это происходит в конструкторе, а не в функции insert.

+0

Можете ли вы скопировать цепочку typedefs, которые используются для определения типа «Delaunay»? – lrineau

ответ

2

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

+0

Это действительно было введено в 4.2 – sloriot

+0

Я использую последнюю версию GAL, плюс, не компилятор жалуется, что конструктор этого типа не существует, а не имеет неправильные входы? –

+0

Пожалуйста, проверьте, какую версию CGAL вы используете. Для работы кода он должен быть 4.2. –

1

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

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

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

+0

Ни одна точка не является частью CGAL lib. Это typedef вот так: 'typedef K :: Point_3 Point;' –

+0

Хорошо, видел ваше редактирование. Тогда я понятия не имею, почему он работает в вставке, а не в конструкторе. Хотя в документации указано понятие 'PointInputIterator' для' insert() 'и' InputIterator' для конструктора. Может быть, есть тонкая разница, но я не могу помочь вам в этом. – Boris

Смежные вопросы