3 Stimmen

Array-Bound ist keine Integer-Konstante' bei der Definition der Größe eines Arrays in der Klasse unter Verwendung eines Elements eines Const-Arrays

#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;

}

Ich kann mir nicht erklären, warum das nicht funktioniert. Andere Leute mit diesem Problem scheinen zu versuchen, Arrays dynamisch zuzuweisen. Jede Hilfe ist sehr zu schätzen.

4voto

Ed S. Punkte 118985

X ist konstant (wie natürlich auch z), aber x[0] ist kein konstanter Ausdruck. Array-Deklarationen in einer Klassendefinition müssen konstante Größenangaben enthalten.

Überlegen Sie einmal: Wie soll der sizeof-Operator die Größe Ihrer Klasse ermitteln, wenn sie zur Kompilierzeit ein Array von unbekannter Größe enthält?

3voto

Puppy Punkte 141483

Die Hauptversion funktioniert, weil Ihr Compiler eine Erweiterung hat, die Arrays mit variabler Länge zulässt. Array-Zugriffe können in C++03 keine konstanten Ausdrücke sein, selbst wenn das Array und der Index beide konstante Ausdrücke sind, was die Quelle des Fehlers ist.

1voto

Edward Strange Punkte 39597

Die Größe eines Arrays muss eine konstanter Ausdruck . Ich glaube nicht, dass konstante Elemente in einem Array als solche zu betrachten sind.

Die funktionierende Version in main() ist wahrscheinlich auf eine Compiler-Erweiterung zurückzuführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X