You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EOSIO合约新增act6触发constexpr变量必须由常量表达式初始化错误

错误原因

这个报错是EOSIO合约开发中的典型名称规则违例问题:
EOSIO的name类型(包括动作名、账户名)有严格的字符集限制,仅允许使用以下字符:

  • 小写字母a-z
  • 数字1-5
  • 特殊符号.(点号,不能放在首尾也不能连续出现)
    同时长度不能超过12个字符。

你定义act6_action时用的"act6"_n字面量里包含数字6,不在允许的数字范围内,触发了EOSIO内部的字符校验逻辑:eosio::check本身不是constexpr函数,不能在编译期常量表达式里执行,所以直接抛出编译错误。
这也能解释为什么act5可以正常编译:数字5属于允许的1-5范围,没有触发校验逻辑。

可行解决方案

只需要调整动作名字面量为符合EOSIO名称规则的字符串即可,可选方案如下:

  1. 替换非法数字6为允许的小写字母即可,示例:
// 把act6的名称改成允许的名字,比如actx、acts都可以,只要不含6及以上的数字
ACTION actx(name nm);
using actx_action = action_wrapper<"actx"_n, &project::actx>;
  1. 如果要保留数字编号逻辑,可以改用1-5范围内的数字组合,或者用全字母拼写数字:
// 例如用全字母拼写数字6
ACTION actsix(name nm);
using actsix_action = action_wrapper<"actsix"_n, &project::actsix>;

修改后重新编译即可解决报错。

内容的提问来源于stack exchange,提问作者Arkyris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:24:02