En fait, tu ne peux pas initialiser un tableau membre autrement qu'avec la valeur par défaut dans la liste d'initialisation.
Tu peux ruser un peu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
struct DllExport Globals
{
public:
static int Idx_integ;
int Tinteg[6];
int const& TI_band1_2;
static Globals & instance();
private:
Globals() : TI_band1_2 (Tinteg[Idx_integ]) {
Tinteg[0]=1000;
Tinteg[1]=2000;
Tinteg[2]=3000;
Tinteg[3]=4000;
Tinteg[4]=7000;
Tinteg[5]=10000;
}
}; |
et dans le fichier d'implémentation:
int Globals::Idx_integ = 0;
En effet, avec static, la variable Idx_integ n'est membre d'aucun objet de la classe, donc pas à initier dans le constructeur.
Cette définition doit être unique dans le programme, donc non présente dans l'en-tête.
J'ai transformé TI_band1_2 est une référence constante vers la première case du tableau. ainsi, elle gardera systématiquement sa valeur.
Mais je devine que tu veux pouvoir changer cette valeur.
Du coup, tu aurais beaucoup plus intérêt d'avoir une fonction membre.
J'enlève ce fameux static devant Idx_integ, il n'a pas de sens ici.
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
|
struct DllExport Globals {
public:
typedef int Idx_type;
typedef int values_type;
Idx_type Idx_integ() const {return Idx_integ_value;}
bool Idx_integ(Idx_type i) {
if (i <=0 || i>=6) return false;
Idx_integ_value = i;
return true;
}
values_type Tinteg[6];
values_type const& TI_band1_2() const {return Tinteg[Idx_integ];}
static Globals & instance();
private:
Idx_type Idx_integ_value;
private:
Globals() : Idx_integ(0) {
Tinteg[0]=1000;
Tinteg[1]=2000;
Tinteg[2]=3000;
Tinteg[3]=4000;
Tinteg[4]=7000;
Tinteg[5]=10000;
}
}; |
Je n'aime pas laisser la main sur le tableau Tinteg, je pense qu'une telle variable membre devrait être privée ou constante.
Petite remarque au passage: pour des raisons de lisibilité, si tu utilises un private: ou public:, je te recommande de spécifier le premier, même s'il est implicite.
Partager