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
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();
 
 
}
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
 
#ifndef DATA_H
#define DATA_H
 
class Data
{
    private:
    int nb[6];
    int res;
 
    public:
    Data(int *nb, int res);
 
    void affiche();
};
#endif
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
 
#include "globale.h"
#include "Data.h"
#include "Traitement.h"
 
Traitement::Traitement()
{
    i = 0;
}
 
void Traitement::affiche()
{
    globale_data->affiche();
}
globale.h
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
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 ...

Merci d'avance