Fehler: Nichtstatische Initialisierung eines flexiblen Array-Mitglieds in einigen Fällen, aber nicht anderer [Duplikat]C++

Programme in C++. Entwicklerforum
Guest
 Fehler: Nichtstatische Initialisierung eines flexiblen Array-Mitglieds in einigen Fällen, aber nicht anderer [Duplikat]

Post by Guest »

Ich verwende die neueste Version von G ++, um einen Testcode zu kompilieren, der ein Array von Strukturzeigern umfasst, bei denen die Strukturen ein Array enthalten. Die Kompilierung schlägt fehl, wenn ich versuche, das Array von Strukturzeigern in einer Zeile zu initialisieren. Wenn ich jedoch Variablen die Strukturen zuweist und beim Erstellen des Arrays dann ihre Adressen nehme, beschwert sich G ++ nicht. Ich möchte verstehen, warum. Dies ist mein erster Beitrag, also entschuldige ich mich, wenn es fehlen.

Code: Select all

#include 

typedef struct {
uint16_t num_elements;
uint8_t elements[];
} HasArray;

HasArray x = {.num_elements = 2, .elements = {51, 17}};
HasArray y = {.num_elements = 4, .elements = {1, 42, 88, 73}};

const HasArray* collection[] = {&x, &y};

// main() somewhere
Der oben genannte Code funktioniert, was ich davon ausgehe, dass G ++ zum Kompilierzeit (oder ähnliches) Speicher für x und y zuweisen kann. Wenn ich versuche, die Sammlung wie SO zu initialisieren:
// HasArray cast is necessary so I can take the address, doing `&` on just the `{}`
// didn't work
// Also I would use a macro for these declarations, I know it's clunky
const HasArray* collection[] = {
&(HasArray){.num_elements = 2, .elements = {51, 17}},
&(HasArray){.num_elements = 4, .elements = {1, 42, 88, 73}}
};
< /code>
g ++ löscht < /p>
austest.c:16:56: error: non-static initialization of a flexible array member
16 | &(HasArray){.num_elements = 2, .elements = {51, 17}},
| ^
test.c:17:63: error: non-static initialization of a flexible array member
17 | &(HasArray){.num_elements = 4, .elements = {1, 42, 88, 73}}
| ^
< /code>
Was unterscheidet diese Situationen? In meinem Gehirn wird die zweite Syntax zur Kompilierungszeit immer noch Speicher zuweisen, aber es scheint, dass dies nicht der Fall ist. Ich verstehe Geben Sie die Größe dem Compiler an, ohne separate Variablen für jede Struktur zu erstellen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post