Компилятору необходимо знать точный размер struct json_array_t
, чтобы определить, сколько памяти ему необходимо выделить для элемента union
внутри структуры json_array_entry_t
и с учетом того, сколько памяти ему необходимо выделить для объекта. структуры json_array_entry_t
в целом.
Простого прямого объявления struct json_array_t
в этом случае недостаточно.
Поместите определение struct json_array_t
struct json_array_t {
struct json_array_entry_t* entries;
size_t len, cap;
};
до определения struct json_array_entry_t
. Таким образом, компилятор знает размер структуры json_array_t
, и вы также можете избавить его от прямого объявления.
Поскольку entries
- это всего лишь указатель, вам не нужно предварительное объявление для json_array_entry_t
.
struct json_array_t {
struct json_array_entry_t* entries;
size_t len, cap;
};
struct json_array_entry_t {
enum json_type type;
union {
bool boolean;
long long integer;
double floating;
char* string;
struct json_array_t array;
};
};