Erreur de compilation GCC
Bonjour,
Dans le cadre de mes études je doit développer une application "Simulateur Cardiaque" en C++ avec la bibliothèque Qt 3.3 sous Linux. Le but de l'exercice est de mettre en place une architecture MVC. Mon application fonctionnais bien, mais depuis que j'ai implémenter une nouvelle classe (qui contient un singleton), j'ai des erreurs de compilation du type : multiple definition of . J'ai fait beaucoup de recherches sur google et apparement mon problème viendrais d'une définition d'une variable globale dans un fichier de déclaration .h.
Voila de quoi est composée mon projet :
battement.h/cpp --> Classe qui dérive de QThread et qui joue un son toutes les n millisecondes (représentatif des battement du coeur)
coeur.h/cpp --> Classe qui contient des méthodes pour stresser/calmer/réguler le coeur. Il y a un lien de type agragation entre Battement et Coeur.
controleur.ui.h --> Interface graphique Qt qui permet de démarrer les battement de coeur, stresser, calmer, arréter et quitter l'application
vue.ui.h --> Interface graphique Qt qui affiche via des widget (sans blagues) les informations du coeur (pouls, etc...)
sujet.h/cpp --> La classe qui contient un singleton, mais qui contient aussi une autre classe dérivant de QCustomEvent, et qui contient une variable constante représentative du numéro d'évenement.
C'est cette classe qui me pose problème. J'ai vérifier mon code avec la correction proposée, mais celle ci m'affiche les mêmes erreurs de compilation.
Dans un premier temps voici mon log de compilation :
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| yann@fenix:~/Developpement/CNED/Cardio4$ make
g++ -o Cardio4 .obj/main.o .obj/battement.o .obj/coeur.o .obj/sujet.o .obj/controleur.o .obj/vue.o .obj/moc_controleur.o .obj/moc_vue.o -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread
.obj/sujet.o: In function `EvtInt::lireInt() const':
/usr/include/qt3/qglist.h:153: multiple definition of `EvtInt::lireInt() const'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:51: first defined here
.obj/sujet.o: In function `EvtInt':
/home/yann/Developpement/CNED/Cardio4/sujet.cpp:46: multiple definition of `EvtInt::EvtInt(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: first defined here
.obj/sujet.o: In function `EvtInt':
/home/yann/Developpement/CNED/Cardio4/sujet.cpp:46: multiple definition of `EvtInt::EvtInt(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: first defined here
.obj/sujet.o: In function `Sujet::getInstance()':
/home/yann/Developpement/CNED/Cardio4/sujet.cpp:9: multiple definition of `Sujet::getInstance()'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:9: first defined here
.obj/sujet.o:/usr/include/qt3/qglist.h:153: multiple definition of `Sujet::pSingleton'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:51: first defined here
.obj/sujet.o: In function `Sujet::notifier(int, int)':
/home/yann/Developpement/CNED/Cardio4/sujet.cpp:26: multiple definition of `Sujet::notifier(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:26: first defined here
.obj/sujet.o: In function `Sujet::resilier(QObject*)':
/home/yann/Developpement/CNED/Cardio4/sujet.cpp:21: multiple definition of `Sujet::resilier(QObject*)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:21: first defined here
.obj/sujet.o: In function `Sujet::inscrire(QObject*)':
/home/yann/Developpement/CNED/Cardio4/sujet.cpp:16: multiple definition of `Sujet::inscrire(QObject*)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:16: first defined here
.obj/vue.o: In function `EvtInt::lireInt() const':
/usr/include/qt3/qglist.h:153: multiple definition of `EvtInt::lireInt() const'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:51: first defined here
.obj/vue.o: In function `Sujet::getInstance()':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:9: multiple definition of `Sujet::getInstance()'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:9: first defined here
.obj/vue.o: In function `EvtInt::lireInt() const':
/usr/include/qt3/qglist.h:153: multiple definition of `Sujet::pSingleton'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:51: first defined here
.obj/vue.o: In function `EvtInt':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: multiple definition of `EvtInt::EvtInt(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: first defined here
.obj/vue.o: In function `EvtInt':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: multiple definition of `EvtInt::EvtInt(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: first defined here
.obj/vue.o: In function `Sujet::notifier(int, int)':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:26: multiple definition of `Sujet::notifier(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:26: first defined here
.obj/vue.o: In function `Sujet::resilier(QObject*)':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:21: multiple definition of `Sujet::resilier(QObject*)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:21: first defined here
.obj/vue.o: In function `Sujet::inscrire(QObject*)':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:16: multiple definition of `Sujet::inscrire(QObject*)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:16: first defined here
.obj/moc_vue.o: In function `EvtInt::lireInt() const':
/usr/include/qt3/qglist.h:153: multiple definition of `EvtInt::lireInt() const'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:51: first defined here
.obj/moc_vue.o: In function `EvtInt':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: multiple definition of `EvtInt::EvtInt(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: first defined here
.obj/moc_vue.o: In function `EvtInt':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: multiple definition of `EvtInt::EvtInt(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:46: first defined here
.obj/moc_vue.o: In function `Sujet::getInstance()':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:9: multiple definition of `Sujet::getInstance()'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:9: first defined here
.obj/moc_vue.o:/usr/include/qt3/qglist.h:153: multiple definition of `Sujet::pSingleton'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:51: first defined here
.obj/moc_vue.o: In function `Sujet::notifier(int, int)':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:26: multiple definition of `Sujet::notifier(int, int)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:26: first defined here
.obj/moc_vue.o: In function `Sujet::resilier(QObject*)':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:21: multiple definition of `Sujet::resilier(QObject*)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:21: first defined here
.obj/moc_vue.o: In function `Sujet::inscrire(QObject*)':
/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:16: multiple definition of `Sujet::inscrire(QObject*)'
.obj/main.o:/home/yann/Developpement/CNED/Cardio4/./sujet.cpp:16: first defined here
collect2: ld a retourné 1 code d'état d'exécution
make: *** [Cardio4] Erreur 1 |
Et voici maintenant mon fichier sujet.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
| // Classe Sujet
#ifndef SUJET_H
#define SUJET_H
#include <list>
#include <qobject.h>
#include <qevent.h>
// Numero evenement
const int EVTPERIODE = 1052;
class Sujet
{
private:
static Sujet *pSingleton;
std::list<QObject*> maListe;
std::list<QObject*>::iterator monIterateur;
public:
static Sujet *getInstance();
void inscrire(QObject*);
void resilier(QObject*);
void notifier(int, int);
};
// Classe d'événement personnalisée dérivant de QCustomEvent
// Doc : http://qt.developpez.com/doc/3.3/qcustomevent/
class EvtInt : public QCustomEvent
{
private:
int entier;
public:
EvtInt(int, int);
int lireInt() const;
};
#endif // SUJET_H |
Je ne sais plus quoi faire, et j'espère que vous pourrez m'aider à trouver une solution à mon problème. Si vous voulez que je poste d'autres parties du code n'hésitez pas.
En vous remerciant d'avance.