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 :

Erreur dans la surcharge de fonction pure virtual


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut Erreur dans la surcharge de fonction pure virtual
    Salut à tous,

    j'ai récemment recommencé le C++ pour un stage, et en voulant hériter de la classe Q3CanvasPolygonalItem de la librairie Qt, j'ai eu l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    qt/interactive/Editor.cpp:389: erreur: cannot allocate an object of abstract type ‘DirEdgeItem’
    qt/interactive/DirEdgeItem.h:21: note:   because the following virtual functions are pure within ‘DirEdgeItem’:
    /usr/include/Qt3Support/q3canvas.h:543: note:         virtual Q3PointArray Q3CanvasPolygonalItem::areaPoints() const
    /usr/include/Qt3Support/q3canvas.h:552: note:         virtual void Q3CanvasPolygonalItem::drawShape(QPainter&)
    de mémoire ce message d'erreur est émis quand on a oublié de surcharger (de réécrire concrètement donc) les méthodes pure virtual de la super classe. Or j'ai bel et bien surchargé ces méthodes, je ne comprend donc pas d'où vient l'erreur...

    Voici le bout de code de Editor appellant DirEdgeItem, le header de DirEdgeItem et son implémemtation.

    Editor.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DirEdgeItem * const el = new DirEdgeItem(from, to, canvas(), this, _graph->ColorEdges[i][j], 6, 6); //peu importe les paramètres, ils sont corrects
                        el->show();

    DirEdgeItem.h
    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
     
    #ifndef __DIREDGEITEM_H_
    #define	__DIREDGEITEM_H_
     
    #include <Q3CanvasPolygonalItem>
     
    class Editor;
    class NodeItem;
     
    class DirEdgeItem : public Q3CanvasPolygonalItem
    {
        protected:
     
    	Editor *editor;           
            int color;
    	int indexFrom;            
    	int indexEnd;             
            NodeItem from;
            NodeItem to;
     
        public:
     
    	DirEdgeItem(NodeItem*, NodeItem*, Q3Canvas *, Editor *, int, int, int);
            virtual ~DirEdgeItem();
     
            inline int get_IndexFrom();
    	inline int get_IndexEnd();
     
        private:
     
            int a_w;
            int a_h;
     
    };
     
    int DirEdgeItem::get_IndexFrom()
    {
    	return indexFrom;
    }
     
    int DirEdgeItem::get_IndexEnd()
    {
    	return indexEnd;
    }
     
    #endif
    DirEdgeItem.cpp
    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
     
    #include "DirEdgeItem.h"
    #include "NodeItem.h"
    #include "Editor.h"
     
     
     
    DirEdgeItem::DirEdgeItem(NodeItem * n_from, NodeItem * n_to,  Q3Canvas * c, Editor *_editor, int ccolor, int aw, int ah) :
            Q3CanvasPolygonalItem( c ),
            indexFrom(editor->findNode(n_from)),
    	indexEnd(editor->findNode(n_to)),
            from(n_from),
            to(n_to),
            color(ccolor),
            a_w(aw),
            a_h(ah)
    {
        n_from->addOutEdge(this);
        n_to->addInEdge(this);
    }
     
    ~DirEdgeItem()
    {
        hide();
    }
     
    void drawShape(QPainter &painter)
    {
        // (...) dessin de mon arête
    }
     
    Q3PointArray areaPoints() const
    {
        Q3PointArray res(4);
     
        // (...) calcul de res
     
        return res;
    }

    Merci d'avance pour vos réponses ;-). J'ai cherché mai j'y arrive pas là :s

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Il faut tout simplement les spécialiser ... dans la classe fille. Tu les as mis en fonctions libres ce qui en fait deux choses différentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class DirEdgeItem : public Q3CanvasPolygonalItem
    {
    virtual void drawShape(QPainter &);
    virtual Q3PointArray areaPoints() const;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void DirEdgeItem ::drawShape(QPainter &painter)
    {
        // (...) dessin de mon arête
    }
     
    Q3PointArray DirEdgeItem ::areaPoints() const
    {
        Q3PointArray res(4);
     
        // (...) calcul de res
     
        return res;
    }

  3. #3
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Ça semble fonctionner à merveille, merci beaucoup pour cette réponse ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Erreur dans le code VBA - fonction si
    Par ilyaundebutatou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/11/2010, 13h12
  2. Erreur dans une création de fonction. Possible?
    Par marps dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/03/2010, 12h20
  3. Erreur dans une fonction
    Par dark_vidor dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2006, 10h23
  4. Fonction qui renvoie erreur dans mon état
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2005, 12h40
  5. Réponses: 2
    Dernier message: 11/08/2004, 15h01

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