Bonjour,
Je fais actuellement un programme en C++ objet et depuis que j'ai inclus une variable globale, j'ai des problèmes de compilation. J'ai fait quelques recherches sur le forum mais rien n'a pu résoudre mon problème. Pour résumé la situation, j'ai fait un petit programme (il ne sert à rien et n'est pas "propre", alors avis aux puristes) qui recrée l'erreur :
Retour de make :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 g++ -c Main.cc -o Main.o -g g++ -c Data.cc -o Data.o -g g++ -c Traitement.cc -o Traitement.o -g g++ -o essai Main.o Data.o Traitement.o -g Traitement.o: dans la fonction « Traitement::affiche() »: essai_cpp/Traitement.cc:12: référence indéfinie vers « globale_data » collect2: ld returned 1 exit status make: *** [essai] Erreur 1
Voici le code :
Main.cc
Data.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 #include "Main.h" #include "globale.h" #include "Data.h" int main() { int tab[6] = {1,2,3,4,5,6}; Data *d = new Data(tab,10); Data *globale_data = d; Traitement *t = new Traitement(); t->affiche(); }
Traitement.cc
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 #ifndef DATA_H #define DATA_H class Data { private: int nb[6]; int res; public: Data(int *nb, int res); void affiche(); }; #endif
globale.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 #include "globale.h" #include "Data.h" #include "Traitement.h" Traitement::Traitement() { i = 0; } void Traitement::affiche() { globale_data->affiche(); }
Je ne comprends pas pourquoi le linker ne trouve pas la référence de la variable globale. Si quelqu'un a une idée ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #ifndef GLOBALE_H #define GLOBALE_H #include "Data.h" extern Data *globale_data; #endif
Merci d'avance
Partager