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 :
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...
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&)
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
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
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
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
Partager