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:
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:
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:
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:
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