de taille variable objet ne peut pas être initialisé
J'ai une classe comme ça
class aClass
{
public:
aClass() : N(5) {}
void aMemberFunction()
{
int nums[N] = {1,2,3,4,5};
}
private:
const int N;
};
Le code de test est
int main()
{
aClass A;
A.aMemberFunction();
const int N = 5;
int ints[N] = {5,4,3,2,1};
return 0;
}
Quand je compile (g++ 4.6.2 20111027), j'obtiens l'erreur
problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Si je commente la ligne avec int nums[N]
je n'ai pas d'erreur de compilation, de sorte que le code similaire pour le ints
tableau est très bien. N'est-ce pas la valeur de N
connu au moment de la compilation?
Ce qu'il se passe? Pourquoi est - nums
considéré comme un tableau de taille variable? Pourquoi les tableaux nums
et ints
traitées différemment?
- En C++ tableaux nécessitent des expressions constantes pour leur taille. c'est à dire qu'il doit être une constante de compilation, mais N dans votre exemple est initialisé de manière dynamique mais à un littéral.
- Notez que
gcc
en fait un soutien de longueur variable des tableaux en C++ comme une extension que vous venez de vous ne pouvez pas initialiser comme ça
Vous devez vous connecter pour publier un commentaire.
Pas. Au moment
aMemberFunction
est compilé, le compilateur n'est pas maintenant, ceN
est, depuis sa valeur est déterminée au moment de l'exécution. Il n'est pas assez intelligent pour voir qu'il n'y a qu'un seul constructeur, et suppose que la valeur deN
pourrait être différent de 5.N
n'est pas connu au moment de la compilation dans votre exemple, mais il est dans celui-ci:Le code ci-dessus de la compilation, et de déclarer un local tableau de cinq
int
s.