我刚开始通过观看youtube视频(https://www.youtube.com/watch?v=M576WGiDBdQ)来学习稳固。这是为什么我总是有一个无效的论点?重复的问题,但我不能用本文的答案来解决这个问题。我没有足够的声誉发表评论。
整个代码如下所示(它在视频上工作得很好)
pragma solidity ^0.6.0;
contract SimpleStorage {
    
    // This will get initialized to 0!
    uint256 favoriteNumber;
    bool favoriteBool;
    struct People {
        uint256 favoriteNumber;
        string name;
    }
    
    People[] public people;
    mapping(string => uint256) public nameToFavoriteNumber;
    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }
    // view, pure
    function retrieve() public view returns(uint256) {
        favoriteNumber + favoriteNumber;
    }
    function addPerson(string memory _name, uint256 _favoriteNumber) public{    
        people.push(People(_favoriteNumber, _name));
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
    
}其他特性没有错误,但是访问'people‘会给我一个错误
调用SimpleStorage.people错误:错误编码参数:错误:无效BigNumber字符串(argument=“值”value=“code=INVALID_ARGUMENT version=bignumber/5.5.0)
kassé建议在该条(为什么我总是有一个无效的论点?)
当您在人员变量上部署put 0并在您可以添加de addPerson函数之后单击它时。另外,如果你想添加第二个人,放1给人,然后再加一个
我尝试修改代码,如下所示:
People[0] public people;和
People[1] public people;它给了我下面的信息
contracts/SimpleStorage.sol:12:12: TypeError: Array with zero length specified.和
contracts/SimpleStorage.sol:23:9: TypeError: Member "push" not found or not visible after
argument-dependent lookup in struct SimpleStorage.People storage ref[1] storage ref.如果有其他建议,请告诉我。
发布于 2022-02-17 16:14:36
我也在向fcc哈哈学习。不确定你是否还需要它,但以防万一其他人也遇到类似的问题。我认为你不应该改变“公众人物”(people0 public )或“公众人物”(people1 public );
把它当作
People[] public people;
如果我没有错,您应该将这里的people值更改为0,因为默认情况下它是空的。( freecodecamp的代码是正确的)
发布于 2022-02-18 09:08:00
请传递人的索引值为0,1等,以检索相应的值。
https://ethereum.stackexchange.com/questions/117043
复制相似问题