OVH Cloud OVH Cloud

aide sur un problème ponctuel (std::list, templates)

3 réponses
Avatar
meow
Bonjour, je solicite votre aide sur un petit soucis qui m'a tenu la
journ=E9e. Je suis en train de modifier une classe et mon appli ne veut
plus compiler.
J'utilise la biblioth=E8que CGAL qui fait un usqge intensif des
templates. Dedans il y a une classe Alpha_shapes_3D qui, pour aller
vite est un objet g=E9om=E9trique compos=E9 d'arretes, de facettes
(triangulaires), etc... Ce qui m'int=E9rresse c'est d'afficher une alpha
shape dans une fenetre openGl. J'ai ecrit une classe AlphaShapeDrawer
qui poss=E8de une fonction draw(alphashape const &) qui farfouille dans
l'alpha shape donn=E9e en param=E8tre et fait les appels openGls qui vont
bien. J'ai voulu passer =E0 un autre design pour que ce soit 'plus
joli' : non plus une classe qui sait dessiner des alpha shapes, mais
une classe qui aggr=E9ge une alpha shape et saurait la dessiner. Bref,
un alphashape * dans la classe AlphaShapeDrawable et une fonction
draw().

Cette deuxi=E8me impl=E9mentation ne plait pas =E0 mon compilo et je
n'arrive pas =E0 comprendre ses messages cryptiques. Je me permets de
poser =E7a dessous au cas o=F9 =E7a =E9voquerait quelque chose pour vous :

les lignes qui soul=E8vent le coeur de gcc :

std::list<Facets> facets;
facets.clear();
A->get_alpha_shape_facets(std::back_inserter(facets), As::INTERIOR,
alpha);

et plus loin :
std::list<Edges> edges;
edges.clear();
A->get_alpha_shape_edges(std::back_inserter(edges), As::INTERIOR,
alpha);

et un extrait de ses insultes (d=E9sol=E9 pour la longueur, mais je
n'arrive meme pas =E0 extraire ce qui est pertinent) :

.=2E/../GL2/GLAlphaShape3Drawable.h:349: instantiated from 'void
GLAlphashape3Drawable<As>::draw() [with As =3D
CGAL::Alpha_shape_3<CGAL::RT3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_eucli=
dean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > >]'
GL2_QGL_alphashapeViewer.h:32: instantiated from here
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h:788: warning: unused
parameter 'alpha'
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h: In instantiation of
'OutputIterator
CGAL::Alpha_shape_3<Dt>::get_alpha_shape_edges(OutputIterator,
CGAL::Alpha_shape_3<Dt>::Classification_type, const typename
Dt::Geom_traits::FT&) const [with OutputIterator =3D
std::back_insert_iterator<std::list<CGAL::Triple<CGAL::CGALi::CC_iterator<C=
GAL::Compact_container<CGAL::TDS_c3<CGAL::Alpha_shape_cell_base_3<CGAL::Wei=
ghted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_car=
tesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_cb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_c3<CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_al=
pha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<d=
ouble>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_cb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > >, false>, int, int>,
std::allocator<CGAL::Triple<CGAL::CGALi::CC_iterator<CGAL::Compact_containe=
r<CGAL::TDS_c3<CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euc=
lidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_cb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_c3<CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_al=
pha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<d=
ouble>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_cb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > >, false>, int, int> > > >,
Dt =3D
CGAL::RT3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kern=
el<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_eucli=
dean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > >]':
.=2E/../GL2/GLAlphaShape3Drawable.h:420: instantiated from 'void
GLAlphashape3Drawable<As>::draw() [with As =3D
CGAL::Alpha_shape_3<CGAL::RT3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_eucli=
dean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > >]'
GL2_QGL_alphashapeViewer.h:32: instantiated from here
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h:800: warning: unused
parameter 'alpha'
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h: In member function
'OutputIterator
CGAL::Alpha_shape_3<Dt>::get_alpha_shape_vertices(OutputIterator,
CGAL::Alpha_shape_3<Dt>::Classification_type, const typename
Dt::Geom_traits::FT&) const [with OutputIterator =3D
std::back_insert_iterator<std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_b=
ase_3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<C=
GAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > > >, Dt =3D
CGAL::RT3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kern=
el<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_eucli=
dean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > >]':
.=2E/../GL2/GLAlphaShape3Drawable.h:464: instantiated from 'void
GLAlphashape3Drawable<As>::draw() [with As =3D
CGAL::Alpha_shape_3<CGAL::RT3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_eucli=
dean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > >]'
GL2_QGL_alphashapeViewer.h:32: instantiated from here
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h:816: error: no match
for 'operator=3D' in 'it. std::back_insert_iterator<_Container>::operator
++ [with _Container =3D
std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha=
_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<doub=
le>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > >]
(0).std::back_insert_iterator<_Container>::operator* [with _Container
=3D
std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha=
_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<doub=
le>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > >]() =3D CGAL::TR3<GT,
Tds>::Finite_vertices_iterator::operator typename Tds::Vertex_handle()
const [with GT =3D
CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::S=
imple_cartesian<double>
> >, Tds =3D
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_eucli=
dean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > >]()'
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/
stl_iterator.h:362: note: candidates are:
std::back_insert_iterator<_Container>&
std::back_insert_iterator<_Container>::operator=3D(typename
_Container::const_reference) [with _Container =3D
std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha=
_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<doub=
le>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > >]
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/
stl_iterator.h:338: note:
std::back_insert_iterator<std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_b=
ase_3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<C=
GAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > > >&
std::back_insert_iterator<std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_b=
ase_3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<C=
GAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > > >::operator=3D(const
std::back_insert_iterator<std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_b=
ase_3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<C=
GAL::Simple_cartesian<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > >,
std::allocator<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_=
alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian=
<double>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >,
CGAL::TDS_vb3<CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alp=
ha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<do=
uble>
> >,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3=
<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
> >,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ke=
rnel<CGAL::Simple_cartesian<double>
> >, CGAL::TDS_cb3<void> > > > > > > > > > >&)

3 réponses

Avatar
Michael DOUBEZ
Bonjour, je solicite votre aide sur un petit soucis qui m'a tenu la
journée. Je suis en train de modifier une classe et mon appli ne veut
plus compiler.
J'utilise la bibliothèque CGAL qui fait un usqge intensif des
templates. Dedans il y a une classe Alpha_shapes_3D qui, pour aller
vite est un objet géométrique composé d'arretes, de facettes
(triangulaires), etc... Ce qui m'intérresse c'est d'afficher une alpha
shape dans une fenetre openGl. J'ai ecrit une classe AlphaShapeDrawer
qui possède une fonction draw(alphashape const &) qui farfouille dans
l'alpha shape donnée en paramètre et fait les appels openGls qui vont
bien. J'ai voulu passer à un autre design pour que ce soit 'plus
joli' : non plus une classe qui sait dessiner des alpha shapes, mais
une classe qui aggrége une alpha shape et saurait la dessiner. Bref,
un alphashape * dans la classe AlphaShapeDrawable et une fonction
draw().

Cette deuxième implémentation ne plait pas à mon compilo et je
n'arrive pas à comprendre ses messages cryptiques. Je me permets de
poser ça dessous au cas où ça évoquerait quelque chose pour vous :

les lignes qui soulèvent le coeur de gcc :

std::list<Facets> facets;
facets.clear();
A->get_alpha_shape_facets(std::back_inserter(facets), As::INTERIOR,
alpha);

et plus loin :
std::list<Edges> edges;
edges.clear();
A->get_alpha_shape_edges(std::back_inserter(edges), As::INTERIOR,
alpha);

et un extrait de ses insultes (désolé pour la longueur, mais je
n'arrive meme pas à extraire ce qui est pertinent) :

[snip]

/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h:816: error: no match
for 'operator=' in 'it. std::back_insert_iterator<_Container>::operator
++ [with _Container > std::list< [...] >]
(0).std::back_insert_iterator<_Container>::operator* [with _Container
[snip]
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/
stl_iterator.h:362: note: candidates are:
std::back_insert_iterator<_Container>&
std::back_insert_iterator<_Container>::operator=(typename
_Container::const_reference) [with _Container > std::list<CGAL::TDS_v3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
[snip]


Il semble qu'il y a un problème d'opérateur d'affectation. Sans le code
source, je peux pas en dire beaucoup plus.

Michael

Avatar
James Kanze
meow wrote:

J'utilise la bibliothèque CGAL qui fait un usqge intensif des
templates. Dedans il y a une classe Alpha_shapes_3D qui, pour aller
vite est un objet géométrique composé d'arretes, de facettes
(triangulaires), etc... Ce qui m'intérresse c'est d'afficher une alpha
shape dans une fenetre openGl. J'ai ecrit une classe AlphaShapeDrawer
qui possède une fonction draw(alphashape const &) qui farfouille dans
l'alpha shape donnée en paramètre et fait les appels openGls qui vont
bien. J'ai voulu passer à un autre design pour que ce soit 'plus
joli' : non plus une classe qui sait dessiner des alpha shapes, mais
une classe qui aggrége une alpha shape et saurait la dessiner. Bref,
un alphashape * dans la classe AlphaShapeDrawable et une fonction
draw().

Cette deuxième implémentation ne plait pas à mon compilo et je
n'arrive pas à comprendre ses messages cryptiques. Je me permets de
poser ça dessous au cas où ça évoquerait quelque chose pour vous :

les lignes qui soulèvent le coeur de gcc :

std::list<Facets> facets;
facets.clear();
A->get_alpha_shape_facets(std::back_inserter(facets), As::INTERIOR,
alpha);

et plus loin :
std::list<Edges> edges;
edges.clear();
A->get_alpha_shape_edges(std::back_inserter(edges), As::INTERIOR,
alpha);


C'est difficile à dire quoique ce soit sans savoir ce que c'est
A ni les définitions de get_alpha_shape_*. D'après les messages
d'erreur, je conclus que ce sont des fonctions templatées, et
que c'est l'instantiation (déclenchée par leur utilisation
ci-dessus) qui ne va pas. Alors, ou bien, il y a une erreur dans
la fonction même, ou bien, tu l'a instancié avec quelque chose
qui ne lui va pas (qui n'est pas conforme aux contraints).

Pour commencer, je démanderais quels sont les contraints des
paramètres de ces fonctions. Est-ce qu'elles acceptent un
itérateur de sortie, par exemple, ou est-ce qu'elles ont besoins
d'un « forward iterator », ou quelque chose de plus ?

et un extrait de ses insultes (désolé pour la longueur, mais je
n'arrive meme pas à extraire ce qui est pertinent) :


En général, la première et la dernière ligne de chaque erreur
sont les plus signifiante.

../../GL2/GLAlphaShape3Drawable.h:349: instantiated from 'void
GLAlphashape3Drawable<As>::draw() [with As =
CGAL::Alpha_shape_3<CGAL::RT3<CGAL::Weighted_alpha_shape_euclidean_traits _3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>
,
CGAL::TDS3<CGAL::Alpha_shape_vertex_base_3<CGAL::Weighted_alpha_shape_euc lidean_traits_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>


,
CGAL::T_vb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ kernel<CGAL::Simple_cartesian<double>


, CGAL::TDS_vb3<void> > >,
CGAL::Alpha_shape_cell_base_3<CGAL::Weighted_alpha_shape_euclidean_traits _3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>


,
CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ kernel<CGAL::Simple_cartesian<double>


, CGAL::TDS_cb3<void> > > > > >]'
GL2_QGL_alphashapeViewer.h:32: instantiated from here


/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h:788: warning: unused
parameter 'alpha'


Ce n'est qu'un avertissement : la fonction définie À
Alpha_shape_3.h, ligne 788, a un paramètre qui s'appelle alpha,
et qui ne sert pas. Supprime le nom du paramètre pour taire
l'avertissement (ce qui laisse moins de messages à analyser).

[...]
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h: In member function
'OutputIterator


[...]

CGAL::T_cb3<CGAL::Weighted_alpha_shape_euclidean_traits_3<CGAL::Filtered_ kernel<CGAL::Simple_cartesian<double>
, CGAL::TDS_cb3<void> > > > >]':
../../GL2/GLAlphaShape3Drawable.h:464: instantiated from 'void


GLAlphashape3Drawable<As>::draw() [with As =
[...]

GL2_QGL_alphashapeViewer.h:32: instantiated from here
/usr/local/CGAL-3.1/include/CGAL/Alpha_shape_3.h:816: error: no match
for 'operator=' in 'it. std::back_insert_iterator<_Container>::operator
++ [with _Container =
[...]

(0).std::back_insert_iterator<_Container>::operator* [with _Container =
[...]

Tds>::Finite_vertices_iterator::operator typename Tds::Vertex_handle()
const [with GT =
[...]

/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/
stl_iterator.h:362: note: candidates are:
std::back_insert_iterator<_Container>&
std::back_insert_iterator<_Container>::operator=(typename
_Container::const_reference) [with _Container =


A priori, tu essaies d'affecter quelque chose à ton itérateur
qui ne lui convient pas. Peut-être dans une expression du
genre :
*iter ++ = ... ;
(Quelque part dans tout ce que j'ai supprimé, il y a eu mention
des opérateurs * et ++.) Sache que les back_insert_iterator (et
les itérateurs de sortie en général) ne sont pas réelement des
itérateurs ; que les opérateurs ++ et * ne font rien que de
renvoyer une référence à l'itérateur même, et que c'est une
affectation d'une valeur à l'itérateur qui insère cette valeur
dans la collection. Une expression comme celle-là a exactement
le même effet que :
iter = ... ;

Ça veut dire que quelque part dans get_alpha_shape_facets, tu
essaies d'insérer un edge, et vice versa. Ou... est-ce que
Facets et Edges ont une classe de base commune, et que c'est ça
que tu finis par insérer ? (Attention s'il y a du
polymorphisme. Les collections contiennent des valeurs, donc,
des objets non polymorphique, d'un type bien précis. Pour avoir
la polymorphisme, il faut passer par des pointeurs.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
meow
En fait c'est couillon, mais je me rends compte que je ne sais pas
exactement comment lire les messages du compilo lorsqu'ils tiennent
sur plusieurs lignes. A l'instinct je dirais que ça ressemble à :

nom de fichier, lignes, "instancié à :"
...
nom de fichier, lignes, "instancié à :"
description de l'erreur ou du warning

Du coups je comprends mieux l'idée... Ici, la première partie est
dévolue au warning sur alpha (qui n'est pas bien grave et qui plus est
se trouve dans CGAL... Cela dit, y a t'il un moyen de spécifier au
compilo que "oui, je sais qu'à cet endroit précis il y a un alpha dont
je ne me sers pas et que je m'en fiche" ?). Du coups je reportes mon
attention sur la seconde partie et que vois-je ? : A priori l'erreur
est dans un fichier moc_blahblah.cpp ...Argh, une couche d'entropie
supplémentaire.
En fait j'ai menti : j'ai fait une autre modif dans ce code que le
simple déplacement de mon alphashape : j'ai ajouté du qt... Je n'ai
malheureusement plus le temps de me pencher sur la question maintenant
mais j'y reviendrai plus tard.

Merci à vous pour les conseils et votre patience à fourrager dans mon
log immangeable.