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
InformationsquelleAutor stardt | 2012-03-13