Mapping
如何將元素添加到映射數組(映射)?
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));