Bonjour, j'essaye de définir mes classes et de les implémenter uniquement dans les fichiers d'en-tête (.hpp). Ce qui est parfaitement possible en C++, voici mes sources :
main.cpp :
FenetrePrincipale.hpp :
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 /* *GGFM = Générateur Graphique de Fonctions Mathématiques *License = BY-NC-SA (http://creativecommons.org/licenses/by-nc-sa/2.0/fr/) *Créateur = Abdelite *GGFM/main.cpp */ #include <QtCore> #include <QtGui> #include <QtGlobal> #include "FenetrePrincipale.hpp" #include "Afficheur.hpp" int main(int argc, char* argv[]) { QApplication app(argc, argv); FenetrePrincipale fenetrePrincipaleDeGGFM; return app.exec(); }
Afficheur.hpp :
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 /* *GGFM = Générateur Graphique de Fonctions Mathématiques *License = BY-NC-SA (http://creativecommons.org/licenses/by-nc-sa/2.0/fr/) *Créateur = Abdelite *GGFM/FenetrePrincipale.hpp */ #ifndef HEADER__FenetrePrincipale #define HEADER__FenetrePrincipale #include <QtCore> #include <QtGui> #include <QtGlobal> #include "Afficheur.hpp" class FenetrePrincipale : public QWidget { Q_OBJECT public: FenetrePrincipale(QWidget* widgetParent = 0); protected: QGraphicsView* m; Afficheur* i; void resizeEvent(QResizeEvent* event); }; FenetrePrincipale::FenetrePrincipale(QWidget* widgetParent) { this->setWindowTitle("Repére Orthogonal"); this->setWindowIconText("icone.png"); this->resize(400, 450); i = new Afficheur(this); m = new QGraphicsView(i, this); m->move((((this->width()) / 2) - ((m->width()) / 2)), (((this->height()) / 2) - ((m->height()) / 2))); m->show(); this->show(); } void FenetrePrincipale::resizeEvent(QResizeEvent* event) { m->move((((this->width()) / 2) - ((m->width()) / 2)), (((this->height()) / 2) - ((m->height()) / 2))); } #endif //HEADER__FenetrePrincipale
Voilà, maintenant quand j'essaye de compiler, on me retourne un tas d'erreur :
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 /*! *GGFM = Générateur Graphique de Fonctions Mathématiques *License = BY-NC-SA (http://creativecommons.org/licenses/by-nc-sa/2.0/fr/) *Créateur = Abdelite *GGFM/Afficheur.hpp */ #ifndef HEADER__Afficheur #define HEADER__Afficheur #include <QtCore> #include <QtGui> #include <QtGlobal> class Afficheur : public QGraphicsScene { Q_OBJECT public: Afficheur(QObject* objectParent = 0); QPointF returnPointOfRepereStandart(QPointF pointOfRepereOrthogonal); QPointF returnPointOfRepereOrthogonal(QPointF pointOfRepereStandart); protected: QPointF pointOriginRepereOrthogonal; QPointF pointOriginRepereStandart; }; Afficheur::Afficheur(QObject* objectParent) { this->setSceneRect(0, 0, 100, 100); pointOriginRepereStandart = QPointF(0, 0); pointOriginRepereOrthogonal = QPointF(50, 50); QPoint kiko(0, 0); QPointF kiku(0, 4.5678); QLineF lino(this->returnPointOfRepereStandart(kiko), this->returnPointOfRepereStandart(kiko)); QLineF linu(this->returnPointOfRepereStandart(kiku), this->returnPointOfRepereStandart(kiku)); this->addLine(lino); this->addLine(linu); } QPointF Afficheur::returnPointOfRepereStandart(QPointF pointOfRepereOrthogonal) { return QPointF((pointOriginRepereOrthogonal.x() + pointOfRepereOrthogonal.x()), (pointOriginRepereOrthogonal.y() - pointOfRepereOrthogonal.y())); } QPointF Afficheur::returnPointOfRepereOrthogonal(QPointF pointOfRepereStandart) { return QPointF((pointOfRepereStandart.x() - pointOriginRepereOrthogonal.x()), (pointOriginRepereOrthogonal.y() - pointOfRepereStandart.y())); } #endif //HEADER__Afficheur
Si j'implémente les méthodes dans le corps de la classe, ou si j'utilise les .cpp, ou encore si je retire la macro Q_OBJECT, tout semble fonctionner. Le problème dois sûrement venir du moc.
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 release/moc_Afficheur.o:moc_Afficheur.cpp:(.text+0x0): multiple definition of `Afficheur::returnPointOfRepereStandart(QPointF)' release/main.o:main.cpp:(.text+0x0): first defined here release/moc_Afficheur.o:moc_Afficheur.cpp:(.text+0x38): multiple definition of `Afficheur::returnPointOfRepereOrthogonal(QPointF)' release/main.o:main.cpp:(.text+0x38): first defined here release/moc_Afficheur.o:moc_Afficheur.cpp:(.text+0xf0): multiple definition of `Afficheur::Afficheur(QObject*)' release/main.o:main.cpp:(.text+0xec): first defined here release/moc_Afficheur.o:moc_Afficheur.cpp:(.text+0x2f0): multiple definition of`Afficheur::Afficheur(QObject*)' release/main.o:main.cpp:(.text+0x2ec): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0x0): multiple definition of `Afficheur::returnPointOfRepereStandart(QPointF)' release/main.o:main.cpp:(.text+0x0): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0x38): multiple definition of `Afficheur::returnPointOfRepereOrthogonal(QPointF)' release/main.o:main.cpp:(.text+0x38): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0xf0): multiple definition of `FenetrePrincipale::resizeEvent(QResizeEvent*)' release/main.o:main.cpp:(.text+0x70): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0x16c): multiple definition of `Afficheur::Afficheur(QObject*)' release/main.o:main.cpp:(.text+0xec): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0x36c): multiple definition of `Afficheur::Afficheur(QObject*)' release/main.o:main.cpp:(.text+0x2ec): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0x56c): multiple definition of `FenetrePrincipale::FenetrePrincipale(QWidget*)' release/main.o:main.cpp:(.text+0x4ec): first defined here release/moc_FenetrePrincipale.o:moc_FenetrePrincipale.cpp:(.text+0x784): multiple definition of `FenetrePrincipale::FenetrePrincipale(QWidget*)' release/main.o:main.cpp:(.text+0x7a4): first defined here collect2: ld returned 1 exit status mingw32-make[1]: *** [release\GGFM.exe] Error 1 mingw32-make[1]: Leaving directory `C:/Users/tyuityuityui/Desktop/GGFM' mingw32-make: *** [release] Error 2
Pourriez-vous s'il vous plaît m'aider à ce que ce mini-projet compile, merci d'avance.
Partager