IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Héritage de classes templates (CGAL)


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Héritage de classes templates (CGAL)
    Hello,

    Je travaille actuellement avec une bibliothèque de calcul graphique (CGAL) dont les
    classes sont fortement basées sur les templates.

    Lorsque j'hérite d'une des ces classes, une foule de messages d'erreurs 'no type named...'

    Ci-dessous, le code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
    #include <CGAL/Triangulation_euclidean_traits_xy_3.h>
    #include <CGAL/Delaunay_triangulation_2.h>
    
    template <class kernel, class TDS>
    class DT2 : public CGAL::Delaunay_triangulation_2<kernel,TDS>
    {
        public:
        void gl_draw_generators()
        {
    	//ici viendra un dessinage GL
        }
        private:
        QString name; // le nom de la triangulation
    };
    
    int main(int argc, char *argv[])
    {
        typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
        typedef CGAL::Triangulation_euclidean_traits_xy_3<K> Gt;
        typedef CGAL::Delaunay_triangulation_2<Gt> Delaunay;
    
        Delaunay* normal=new Delaunay;       // Cela fonctionne ( pas d'héritage )
    
        DT2<K,Gt>* heritage=new DT2<K,Gt>();   // Cela provoque une quantité d'erreur 'no type named...'
    }
    -> Faut-il-ajouter des déclarations supplémentaires dans mon code ?

    -> Voila deux jours que je planche là-dessus, je ne trouve pas de réponses satisfaisantes.

    Merci de votre aide.

  2. #2
    screetch
    Invité(e)
    Par défaut
    et c'est no type named quoi ?

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Delaunay est un Delaunay_triangulation_2<Gt>, et ton DT2 est un Delaunay_triangulation_2<K, Gt>, c'est normal ce paramètre template en plus ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    To Laurent :

    Tu trouves dessous le début du .h qui pose problème :
    (voir la ligne qui lance la première erreur : "/usr/include/CGAL/Triangulation_2.h:77: erreur: no type named ‘size_type’ in ‘class CGAL::Etxy3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double> > >’

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #ifndef CGAL_TRIANGULATION_2_H
    #define CGAL_TRIANGULATION_2_H
    
    #include <list>
    #include <vector>
    #include <map>
    #include <algorithm>
    #include <utility>
    #include <iostream>
    
    #include <CGAL/iterator.h>
    #include <CGAL/Iterator_project.h>
    #include <CGAL/function_objects.h>
    
    #include <CGAL/Triangulation_short_names_2.h>
    #include <CGAL/triangulation_assertions.h>
    #include <CGAL/Triangulation_utils_2.h>
    
    #include <CGAL/Triangulation_data_structure_2.h>
    #include <CGAL/Triangulation_vertex_base_2.h>
    #include <CGAL/Triangulation_face_base_2.h>
    #include <CGAL/Triangulation_line_face_circulator_2.h>
    #include <CGAL/Random.h>
    
    #include <CGAL/spatial_sort.h>
    
    CGAL_BEGIN_NAMESPACE
    template < class Gt, class Tds > class Triangulation_2;
    template < class Gt, class Tds > std::istream& operator>>
        (std::istream& is, Triangulation_2<Gt,Tds> &tr);
    template < class Gt, class Tds >  std::ostream& operator<<
      (std::ostream& os, const Triangulation_2<Gt,Tds> &tr);
      
    
    template < class Gt, 
               class Tds = Triangulation_data_structure_2 <
                                 Triangulation_vertex_base_2<Gt>,
                                 Triangulation_face_base_2<Gt> > >
    class Triangulation_2
      : public Triangulation_cw_ccw_2
    {
      friend std::istream& operator>> <>
                    (std::istream& is, Triangulation_2 &tr);
      typedef Triangulation_2<Gt,Tds>             Self;
    
    public:
      typedef Tds                                 Triangulation_data_structure;
      typedef Gt                                  Geom_traits;
      typedef typename Geom_traits::Point_2       Point;
      typedef typename Geom_traits::Segment_2     Segment;
      typedef typename Geom_traits::Triangle_2    Triangle;
      typedef typename Geom_traits::Orientation_2 Orientation_2;
      typedef typename Geom_traits::Compare_x_2   Compare_x;
      typedef typename Geom_traits::Compare_y_2   Compare_y;
    
      typedef typename Tds::size_type              size_type; //ici la première erreur (no type named size_type)
      typedef typename Tds::difference_type        difference_type;
     
      typedef typename Tds::Vertex                 Vertex;
    As-tu une idée ?

  5. #5
    screetch
    Invité(e)
    Par défaut
    http://www.cgal.org/Manual/3.4/doc_h...ulation_2.html

    Delaunay_triangulation_2 attend deux parametres, le premier est des "Traits" et le second des "Data Structure"
    tes deux parametres ne correspondent pas; tu lui donne un "Kernel" et des "Traits"

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Pourquoi utilises tu des pointeurs et des new ?

Discussions similaires

  1. Héritage de classe template
    Par nicolo011 dans le forum Langage
    Réponses: 9
    Dernier message: 24/10/2013, 18h55
  2. Double héritage de classe template, quelques questions
    Par the_angel dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2012, 13h26
  3. Réponses: 6
    Dernier message: 08/01/2012, 10h05
  4. Héritage de classe template
    Par FunkyTech dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2008, 20h07
  5. Foncteur, classes templates et héritage
    Par Floréal dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2007, 22h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo