固定性-无效的BigNumber字符串(参数=&Q;值&Q;值=&Q;&Q;代码=INVALID_ARGUMENT VERSION=BigNumber/5.4.2) [英] Solidity - Invalid BigNumber string (argument="value" value="" code=INVALID_ARGUMENT version=bignumber/5.4.2)

查看:23
本文介绍了固定性-无效的BigNumber字符串(参数=&Q;值&Q;值=&Q;&Q;代码=INVALID_ARGUMENT VERSION=BigNumber/5.4.2)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是可靠的新手。当我尝试读取People数组的值时。我收到一个错误:

对SimpleStorage.People的调用出错:编码参数时出错:错误: 无效的大数字字符串(参数=&Q;值&Q;值=&Q;&Q; CODE=INVALID_ARGUMENT VERSION=Bignumber/5.4.2)

我的编译器版本是0.6.6。不确定出了什么问题?有什么建议吗?

// SPD-License_Identifier: MIT

pragma solidity ^0.6.0;

contract SimpleStorage {
    uint256 favNum;
    
    struct People {
        uint256 favNum;
        string name;
    }
    
    People[] public people;
    
    function store(uint256 _favNum) public {
        favNum = _favNum;
    }
    
    function retrieve() public view returns(uint256) {
        return favNum;
    }
    
    function addPerson(string memory _name, uint256 _favNum) public {
        people.push(People(_favNum, _name));
    }
}

推荐答案

尝试在不传递任何值的情况下调用people()函数(从Remix IDE)时发生错误。

由于People[] public people是公共属性,因此它autogenerates是编译期间的getter函数。但是因为它是一个数组,所以getter函数需要一个uint256参数来指定要检索的数组的索引。

当您传递空字符串时,Remix会尝试将其编码到BigNumber实例中,但失败了。只有当您传递数组的(现有)索引时,它才能正常工作:


如果您希望在一次调用中获取整个数组,则需要创建一个单独的getter函数:

function getAllPeople() public view returns (People[] memory) {
    return people;
}

这篇关于固定性-无效的BigNumber字符串(参数=&Q;值&Q;值=&Q;&Q;代码=INVALID_ARGUMENT VERSION=BigNumber/5.4.2)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆