2017-11-03 18 views
-2

Ich habe diese sehr einfach Code:Warum Array-Variable möglicherweise nicht initialisiert werden?

uint16_t dataSize = 5; 
uint8_t wdata[dataSize] = { 5, 6, 7, 8, 9 }; 

und ich bekomme Fehlermeldung:

variable "wdata" may not be initialized 
uint8_t wdata[dataSize] 

Es ist in einer Datei mit .ccp Erweiterung. Ich habe andere Testfalldateien mit ähnlicher Aussage und Fehlermeldung.

Der Code kompiliert mit gcc ohne jedes Problem. Visual Studio Code C++ IntelliSense ist jedoch derjenige, der den Fehler meldet.

+2

'uint8_t wdata [datasize]' Das ist nicht gültiger C++ Code. In einigen Compilern ist es möglich, aber tue dies nicht. Arrays mit variabler Länge werden im Allgemeinen nicht unterstützt. – DimChtz

+2

In C (ab C99) können Sie [Variable Length Arrays] (http://en.cppreference.com/w/c/language/array) deklarieren, aber nicht in C++. Einige Compiler erlauben das als Erweiterung. –

+1

machen 'dataSize' eine Konstante. –

Antwort

0

Merek R Rat die Lösung entpuppte:

const uint16_t dataSize = 5; 
uint8_t wdata[dataSize] = { 5, 6, 7, 8, 9 }; 
1

DimChtz ist korrekt, Sie können ein Array mit Größe zur Kompilierzeit nicht mit einer Variablen initialisieren.

würden Sie besser dran, nur ohne Größe des Arrays initialisiert:

uint16_t dataSize = 5; 
uint8_t wdata[] = { 5, 6, 7, 8, 9 }; 
+5

Besser noch, Sie könnten 'dataSize' basierend auf der Größe von' wdata' berechnen. –

Verwandte Themen