Y a-t-il une raison pour laquelle les blocs de code me disent que je ne peux pas créer un tableau? J'essaie simplement de faire:
const unsigned int ARRAY[10] = {0,1,2,3,4,5,6,7,8,9};
et ça me donne
erreur: un initialiseur entre accolades n'est pas autorisé ici avant le jeton '{'
J'ai changé d'autres parties de l'initialiseur, mais l'erreur dit toujours la même chose. Cela ne semble pas logique, car c'est l'une des premières choses que j'ai apprises en c ++.
Vous dites que vous l'avez fait au sein d'une classe, en tant que variable privée.
Rappelez-vous que (pour le moment), les variables membres ne peuvent pas être initialisées au même endroit où vous les déclarez (à quelques exceptions près).
struct T {
std::string str = "lol";
};
n'est pas ok. Ce doit être:
struct T {
std::string str;
T() : str("lol") {}
};
Mais, pour ajouter l'insulte à la blessure, avant C++ 0x, vous ne pouvez pas initialiser les tableaux dans le ctor-initializer
!:
struct T {
const unsigned int array[10];
T() : array({0,1,2,3,4,5,6,7,8,9}) {} // not possible :(
};
Et, comme les éléments de votre tableau sont const
, vous ne pouvez pas non plus vous fier à l'affectation:
struct T {
const unsigned int array[10];
T() {
for (int i = 0; i < 10; i++)
array[i] = i; // not possible :(
}
};
Cependant, comme certains autres contributeurs l'ont souligné à juste titre, il semble inutile d'avoir une copie du tableau pour chaque instance de T
si vous ne pouvez pas modifier ses éléments. À la place, vous pouvez utiliser un membre static
.
Ainsi, ce qui suit résoudra votre problème de la meilleure façon - probablement -:
struct T {
static const unsigned int array[10];
};
const unsigned int T::array[10] = {0,1,2,3,4,5,6,7,8,9};
J'espère que cela t'aides.
Comme il s'agit d'une variable membre privée dans une classe (selon le commentaire), cela n'est en effet pas autorisé en C++ 03.
C++ 0x, partiellement pris en charge par de nombreux compilateurs modernes, permet de compiler les éléments suivants:
class C
{
const unsigned int ARRAY[10];
public:
C() : ARRAY{0,1,2,3,4,5,6,7,8,9} {}
};
int main()
{
C obj; // contains a non-static const member: non-assignable
}
Cependant, les membres const non statiques n'ont de sens que s'ils contiennent des valeurs different dans différentes instances de la classe. Si chaque instance doit contenir le même {0,1,2,3,4,5,6,7,8,9}
, alors vous devriez le faire static
, ce qui permet également de le faire en C++ 98:
class C
{
static const unsigned int ARRAY[10];
public:
C() {}
};
const unsigned int C::ARRAY[10] = {0,1,2,3,4,5,6,7,8,9};
int main()
{
C obj;
}