Mapping

如何將元素添加到映射數組(映射)?

  • June 13, 2018

Remix 接受以下程式碼並允許我部署合約:

pragma solidity 0.4.24;

contract bytes32array {



mapping(address => uint)[] balances;            


   function addBalance(address _address, uint _index, uint _amount) public {       
       balances[_index][_address] = _amount;                                       

   }


   function getBalance(address _address, uint8 _index) public view returns(uint) {
         return balances[_index][_address];

   }


}

但是,當我嘗試使用“addBalance”函式時,我得到了一個錯誤(在 Javascript VM 和通過 web3/testrpc 中)。我收到錯誤“處理事務時出現 VM 異常:操作碼無效”。我不知道我做錯了什麼,特別是因為語法被接受了。

您的訪問權限超出範圍。balances的長度為0,因此balances[x]對於 anyx將是一個錯誤。您可以使用balances.push(...)balances.length += 1擴展數組。

或者使用映射的映射,如果您不打算使用連續的 ID:

mapping(uint256 => mapping(address => uint256));

引用自:https://ethereum.stackexchange.com/questions/51165