错误28:表达式必须具有常量值 我在Keil UVIONI5中有一段C++代码,它得到错误28:表达式必须有一个常量值。我正在想办法解决它

错误28:表达式必须具有常量值 我在Keil UVIONI5中有一段C++代码,它得到错误28:表达式必须有一个常量值。我正在想办法解决它,c++,struct,constants,typedef,keil,C++,Struct,Constants,Typedef,Keil,这是函数中正在发生的行: 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 */

这是函数中正在发生的行:

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

你想在函数外进行初始化吗?在C语言中,这里必须有一个常量值。但不是C++。你确定你在使用C++编译器吗?@ MattMcNabb,它是C文件,但是我使用C++编译器。当我使用C99编译时,它工作了,但是我的主要文件是C++,所以我不使用C99。也许编译器决定将.c文件创建为cTest,以将C文件包含在CPP文件中。