Addresses

Solidity插入將地址映射到bytes32數組的數據錯誤

  • June 3, 2018

我的契約如下:

pragma solidity ^0.4.21;
contract try {
   mapping (address=>bytes32[10]) Map;

   function try(){}

   function fill_map(bytes32[10] _attributes) public  {
           Map[msg.sender].push(_attributes);
   }

   function get_map(address id) view public returns (bytes32[10]){
     return Map[id];
   }

}

我得到的錯誤是:

Member “push” not found or not visible after argument-dependent lookup in bytes32[10] storage reference Map[msg.sender].push(_attributes)

我還嘗試使用循環插入數據,如下所示:

   for(uint i=0;i<10;i++)
   {
       Map[msg.sender].push(_attributes[i]);
   }

也會導致同樣的錯誤。

您必須直接分配數據

function fill_map(bytes32[10] _attributes) public  {
       Map[msg.sender] = _attributes;
}

同樣try是保留關鍵字,編譯將失敗。您必須為您的契約使用另一個名稱。

在映射 (key => value) Map中插入數據的語法是

Map[key] = value 

在你的情況下Map[msg.sender] = _attributes

push()函式將數據插入數組但不插入映射。

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