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