У меня есть раздел кода C ++ в Keil Uvision5, который получает ошибку 28: выражение должно иметь постоянное значение. Я пытаюсь понять, как это исправить.
это строка (внутри функции), на которой это происходит:
osPoolDef_t pool_def = { queue_def->queue_sz, queue_def->item_sz};
ему не нравятся переменные queue_sz или item_sz.
вот определение osPoolDef_t:
typedef const struct os_pool_def {
uint32_t pool_sz; /* number of items (elements) in the pool */
uint32_t item_sz; /* size of an item */
void *pool; /* pointer to memory for pool */
} osPoolDef_t;
и queue_def — указатель на osMailQDef_t, показанный ниже:
typedef const struct os_mailQ_def {
uint32_t queue_sz; /* number of elements in the queue */
uint32_t item_sz; /* size of an item */
struct os_mailQ_cb **cb;
} osMailQDef_t;
Надеюсь, этого достаточно.
Кажется, проблема в том, что я больше не использую c99, но код работал для этого файла, когда я использовал c99. Есть ли способ принудительно выполнить компиляцию только этого файла с c99?
Вы можете заставить компилятор armcc использовать C99 с опцией —c99.