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

Solidity函数返回参数数量不匹配报错求助

问题解决

首先,你遇到的编译错误根源很明确:
你的函数_createPsoukrace的returns声明只定义了2个返回值类型:(string memory, uint),但return语句里却返回了11个值,数量完全不匹配,这就是编译器报错的直接原因——返回值数量只看returns声明和return语句的个数是否一致,和结构体、函数参数的变量数量无关。

另外还有两个必须修正的隐藏问题:

  • 函数加了view修饰符,但你在函数里执行了psoukraces.push()修改链上状态变量的操作,view函数不允许修改状态,必须去掉这个修饰符。
  • 结构体里的strenghth拼写错误,少了一个t,应该改成strength,否则结构体初始化时会和参数里的strength不匹配。

如果你的需求是创建Psoukrace实例并返回它,修正后的代码可以这样写:

pragma solidity ^0.8.0;
contract PsoukraceFactory {
    struct Psoukrace {
        string name;
        string title;
        uint level;
        uint HP;
        uint defence;
        uint dodge;
        uint luck;
        uint intelligence;
        uint strength; // 修正拼写错误
        uint attack;
        uint speed;
    }
    Psoukrace [] public psoukraces;

    // 去掉view修饰符,修改returns为返回结构体类型
    function _createPsoukrace( string memory name, string memory title, uint  level, uint HP, uint defence, uint dodge, uint luck, uint intelligence, uint strength, uint attack, uint speed) public returns (Psoukrace memory) {
        Psoukrace memory newPsoukrace = Psoukrace(name, title, level, HP, defence, dodge, luck, intelligence, strength, attack, speed);
        psoukraces.push(newPsoukrace);
        return newPsoukrace; // 返回刚创建的结构体实例
    }
}

如果你的需求是返回那11个固定测试值,就要把returns声明改成对应11个值的类型:returns(string memory, string memory, uint, uint, uint, uint, uint, uint, uint, uint, uint),这样return语句的数量就和声明匹配了,但通常返回结构体的写法更清晰易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:06:39