【发布时间】:2020-03-27 18:37:18
【问题描述】:
在这里,我正在尝试制作状态机,其中 FsmHdlr 应该根据状态和事件调用适当的函数。我得到了上述错误。如何解决这个问题。
S16 handleParamReqEvt(void)
{
/* doing something */
RETVALUE(ROK);
}
S16 handleParamRspEvt(param_resp *paramRsp)
{
/* doing something */
RETVALUE(ROK);
}
typedef enum{
IDLE,
CONFIGURED,
MAX_STATE
}STATE;
/* Events in CL */
typedef enum{
PARAM_REQ,
PARAM_RSP
MAX_EVENT
}EVENT;
param_resp *paramMsg;
S16 FsmHdlr[MAX_STATE][MAX_EVENT] =
{
{
/* PHY_STATE_IDLE */
handleParamReqEvt(), //error :initializer element is not constant
handleParamRspEvt(paramMsg) //error: initializer element is not constant
}
};
【问题讨论】:
-
FsmHdlr这是全局变量吗?否则这个错误没有意义。请提供minimal reproducible example。 -
什么是
S16?RETVALUE是什么?ROK是什么? -
是的 FsmFdlr 在这里是全局的。由于代码很长,我无法粘贴整个 S16 是 int 类型的 Retvalue (rok) 是返回 0
-
您是在尝试编译遗留代码还是这些是您的本地更改?对我来说
FsmHdlr应该是一个函数指针或函数指针数组,取决于输入。 -
@MAMTHASRI 至少在
c中是不可能的,除非你存储函数指针而不是它的返回值。
标签: c