C игнорирует const квалификатор перед структурой - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать массив структур const, но я получаю

error initializer element is not a compile time constant

Я использую Keil IDE.это странно, потому что моя структура является константой, вот пример:

typedef const struct{
     CRGB color;  // CRGB is another struct
     void (*myfunc)(int);
}myProfile;


myProfile profile1 = { ....... }; // initialized struct

myProfile profiles[1] = { profile1 }; // error occurs here

, даже если я использую const myProfile profile1 = { ..... }; для инициализации структуры, я все равно получаю те же ошибки.

Iмогу найти способ обойти это, но я действительно хочу понять, что происходит.Благодаря.

1 Ответ

0 голосов
/ 25 октября 2018

Ошибка возникает из-за того, что вы пытаетесь инициализировать массив переменной, которая не является константой (= фиксированное значение, известное во время компиляции), как указано в комментариях MM.

Если вы хотитесоздать значение по умолчанию для вашей структуры, вы могли бы сделать, как показано здесь .

Основываясь на этом ответе, вы бы инициализировали таблицу с:

MyStruct instances[2] = {MyStruct_default, MyStruct_default};

ярлык для:

MyStruct instances[2] = { {.id = 3}, {.id = 3} };

Обратите внимание, что для структуры, состоящей из нескольких элементов, вы можете оставить некоторые пустыми, и они должны быть установлены на 0 в большинстве случаев.

...