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

EOSIO C++合约编译报错:分解为2个元素但仅提供1个名称

错误原因

该错误触发于EOSIO CDT编译器的ABI生成环节,不属于标准C语法错误。
当使用C
17结构化绑定语法接收多返回值时,EOSIO自带的ABI生成工具无法为隐式auto推导类型的解构变量自动生成符合校验规则的ABI字段映射,就会抛出「Decomposes into 2 elements but only 1 names were provided」报错。
触发错误的具体代码行:

const auto [ reserve_in, reserve_out ] = defibox::get_reserves( stoi(pair_id), tokens.symbol );
修复方案

两种修改方式均可解决问题,按需选择即可:

  • 方案1:显式指定结构化绑定的返回值类型,跳过ABI生成器的自动推导逻辑
const std::pair<asset, asset> [ reserve_in, reserve_out ] = defibox::get_reserves( stoi(pair_id), tokens.symbol );

提示:该写法需要当前作用域已引入<utility>头文件,EOSIO合约默认引入的依赖已经包含该头文件,无需额外手动添加。

  • 方案2:放弃结构化绑定写法,先接收整体返回对象再取内部成员,兼容性最好,适配所有版本的EOSIO CDT
const auto reserves = defibox::get_reserves( stoi(pair_id), tokens.symbol );
const asset reserve_in = reserves.first;
const asset reserve_out = reserves.second;

修改完成后重新执行编译命令即可通过校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:36:09