Variable globale en C++
Résolu
electrikBoy
Messages postés
28
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
C'est encore moi, même si je sais que ce n'est pas du tout conseillé j'aimerais savoir comment déclarer une classe globale qui puisse se lire dans tout le code.
Actuellement j'ai réalisé ceci :
Dans le fichier.h :
using namespace std;
class DataFile
{
protected :
FILE *fp;
public :
static int NumberElectrode;
static int NumberSample;
static float MaxActivity;
static float MinActivity;
static float XStep;
static float YStep;
static float ZStep;
static float **Coord;
static char **ElecID;
static float **mat;
DataFile(QString);
/*...*/
Ensuite j'appelle dans le constructeur de cette manière :
DataFile::NumberElectrode=NumberOfElectrode(fp); //NumberOfElectrode(fp) est une fonction qui compte le nombre d'électrode.
Et il m'affiche le message d'erruer suivant :
undefined reference to DataFile ::NumberElectrode
Pouvez vous m'aider?
C'est encore moi, même si je sais que ce n'est pas du tout conseillé j'aimerais savoir comment déclarer une classe globale qui puisse se lire dans tout le code.
Actuellement j'ai réalisé ceci :
Dans le fichier.h :
using namespace std;
class DataFile
{
protected :
FILE *fp;
public :
static int NumberElectrode;
static int NumberSample;
static float MaxActivity;
static float MinActivity;
static float XStep;
static float YStep;
static float ZStep;
static float **Coord;
static char **ElecID;
static float **mat;
DataFile(QString);
/*...*/
Ensuite j'appelle dans le constructeur de cette manière :
DataFile::NumberElectrode=NumberOfElectrode(fp); //NumberOfElectrode(fp) est une fonction qui compte le nombre d'électrode.
Et il m'affiche le message d'erruer suivant :
undefined reference to DataFile ::NumberElectrode
Pouvez vous m'aider?
3 réponses
-
Salut,
A mon avis tu ferai bien de mettre tes attributs en private, et de faire des accesseurs... le tout en "static".-
-
-
Excuse moi j'avais pas pensé à expliquer : à cause de mon constructeur qui prend en paramètre un QString, pour utiliser les accesseurs j'appelle d'abord mon constructeur. Quand j'appelle le constructeur (DataFile (QString)) dans une autre classe le QString est "NULL" alors que dans le DataFile, il a une valeur bien précise.
Je ne sais pas trop si c'est clair... Je met un peu de code :
Fichier test.cpp :
void MyWindow :: message()
{
QString File = QFileDialog :: getOpenFileName(0, tr(" Select bin file"), "", tr("*.bin")); //You can select a *bin file
if (!(File.isNull())) //If the file exists
{
int answer = QMessageBox::question(this, "File", "Do you wish to select : \n" + File, QMessageBox::Yes|QMessageBox::No); //Ask confirmation
if ((answer==QMessageBox::Yes)) //If it's confirmed
{
DataFile DF(File);
}
Fichier DataFile.cpp:
DataFile :: DataFile (QString file)
{
const char *c=file.toStdString().c_str(); //Convert QString to char
fp=NULL; //Initialisation
fp=fopen(c, "rb"); //Opening in binary form
if (fp!=NULL)
{
char *lire=new char[26]; //Create a character
fgets (lire,26,fp); //Read the title
DataFile::NumberElectrode=NumberOfElectrode(fp); //Count electrode
Ensuite dans un autre fichier si je fais le constructeur de DataFile le QString en paramètre sera nul. -
-
-
-
Salut.
Les membres statiques sont similaires aux variables globales. As tu déclarer ta variable quelque part ?
exemple simplissime :
ex.h :class Ex { static int ex_var; }
et ex.cpp :int Ex::ex_var=0;
"undefined reference" doit être renvoyé par l'éditeur des liens (important de savoir qui renvoi l'erreur, ça aide à la résoudre) et veux dire que la variable n'est pas présente dans les fichiers objets disponibles. -
Merci à tous les deux ça faisait facile une semaine que je galérais là dessus et maintenant ça marche.
Merci beaucoup!!!!