Solidity - 无效的 BigNumber 字符串(argument="value" value="" code=INVALID_ARGUMENT version=bignumber/5.4.2)

Solidity - Invalid BigNumber string (argument="value" value="" code=INVALID_ARGUMENT version=bignumber/5.4.2)

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

call to SimpleStorage.people errored: Error encoding arguments: Error: invalid BigNumber string (argument="value" value="" 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 是一个 public 属性,它 autogenerates 在编译期间是一个 getter 函数。但是因为它是一个数组,所以 getter 函数需要一个 uint256 参数指定要检索的数组的索引。

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


如果你想在一次调用中得到整个数组,你需要创建一个单独的getter函数:

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

我遇到这个错误只是为了发现我错过了将参数传递给我的函数的期望 unit256

您必须点击部署按钮右侧的小箭头,然后将显示字段,以便您完成合约必须接收的数据。