3 votes

'array bound is not an integer constant' lors de la définition de la taille du tableau dans la classe, en utilisant un élément d'un tableau const.

#ifndef QWERT_H
#define QWERT_H

const int x [] = {1, 2,};
const int z = 3;
#endif

#include <iostream>
#include "qwert.h"
class Class   
{  
    int y [x[0]];  //error:array bound is not an integer constant
    int g [z];     //no problem  
};

int main ()  
{  

    int y [x[0]];      //no problem
    Class a_class;

}

Je n'arrive pas à comprendre pourquoi ça ne marche pas. Les autres personnes qui ont ce problème semblent essayer d'allouer dynamiquement des tableaux. Toute aide est la bienvenue.

4voto

Ed S. Points 70246

X est constant (tout comme z évidemment), mais x[0] n'est pas une expression constante. Les déclarations de tableaux dans une définition de classe doivent avoir des spécificateurs de taille constante.

Réfléchissez-y un instant : comment voulez-vous que l'opérateur sizeof évalue la taille de votre classe si elle contient un tableau de taille inconnue au moment de la compilation ?

3voto

Puppy Points 90818

La version principale fonctionne parce que votre compilateur dispose d'une extension pour permettre les tableaux de longueur variable. Les accès aux tableaux ne peuvent pas être des expressions constantes en C++03, même si le tableau et l'index sont tous deux des expressions constantes, ce qui est la source de l'erreur.

1voto

Crazy Eddie Points 23778

La taille d'un tableau doit être un expression constante . Je ne crois pas que les éléments constants d'un tableau soient considérés comme tels.

La version qui fonctionne dans main() est probablement due à une extension du compilateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X