variable-sized-Objekt kann nicht initialisiert werden
Habe ich eine Klasse wie diese
class aClass
{
public:
aClass() : N(5) {}
void aMemberFunction()
{
int nums[N] = {1,2,3,4,5};
}
private:
const int N;
};
Das testen von code ist
int main()
{
aClass A;
A.aMemberFunction();
const int N = 5;
int ints[N] = {5,4,3,2,1};
return 0;
}
Wenn ich compilieren (g++) 4.6.2 20111027), bekomme ich die Fehlermeldung
problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Wenn ich kommentiere die Zeile mit int nums[N]
ich nicht bekommen, eine Zusammenstellung-Fehler, so dass der gleiche code für die ints
array ist in Ordnung. Ist das nicht der Wert der N
zur Kompilierzeit bekannt?
Was ist Los? Warum ist nums
als ein array mit variabler Größe? Warum sind die arrays nums
und ints
anders behandelt?
In C++ arrays erfordern Konstante Ausdrücke für Ihre Größe. d.h. es muss eine compile-Zeit konstant ist, aber N in deinem Beispiel wird dynamisch initialisiert, obwohl eine wörtliche.
Beachten Sie, dass
Beachten Sie, dass
gcc
tatsächlich Unterstützung variabler Länge arrays in C++ als Erweiterung, die Sie einfach kann nicht initialisiert werden dass Sie wieInformationsquelleAutor stardt | 2012-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Zu der Zeit
aMemberFunction
kompiliert, der compiler funktioniert jetzt nicht, wasN
ist, da dessen Wert zur Laufzeit ermittelt werden. Es ist nicht schlau genug, um zu sehen, dass es nur einen Konstruktor, und geht davon aus, dass der Wert vonN
anders sein könnte als 5.Der C++ - compiler sieht nicht smart genug für mich, obwohl, viele andere in den main-stream-Sprachen unterstützen können, initialisieren ein array in int-Werte[N] Weg.
InformationsquelleAutor Ferdinand Beyer
N
noch nicht bekannt ist, werden bei der Kompilierung in Ihrem Beispiel, aber es ist im dieses:Der obige code kompiliert wird, und erklären ein lokales array von fünf
int
s.InformationsquelleAutor Robᵩ