Solidity

如何操作儲存在數組中的值(Solidity 智能合約)?

  • July 27, 2018

我目前正在與一個看似非常簡單的問題作鬥爭。我只是嘗試增加儲存在 Solidity 合約中的數組中的值。

uint256[] public barLengthToBarAmtForSale;

我在建構子中初始化數組…

uint16 counter = uint16(0);
   while(counter <= 10) {
       barLengthToBarAmtForSale.push(uint256(0));
       counter++;
   }

後來我嘗試增加這個數組中的值:

uint16 _length = 5;
barLengthToBarAmtForSale[_length]++;

但是智能合約沒有編譯這一行的 bc :(

可能是什麼原因?

謝謝你。

編輯:對不起 _length 參數的誤導性名稱。這不是數組的長度。這只是一個範例值。我剛剛使用 remix 檢查了我的實現並在那裡編譯。但是,當使用 truffle migrate 時,它不起作用。

我把你的程式碼放在一起,它可以工作。

contract Mycontract {

   uint256[] public barLengthToBarAmtForSale;

   constructor() public {
       uint16 counter = uint16(0);
       while(counter <= 10) {
           barLengthToBarAmtForSale.push(uint256(0));
           counter++;
       }
   }

   function test() public {
       uint16 _length = 5;
       barLengthToBarAmtForSale[_length]++;
   }


}

請注意,此程式碼是等效的:

contract Mycontract {

   uint256[10] public barLengthToBarAmtForSale;

   function test() public {
       uint16 _length = 5;
       barLengthToBarAmtForSale[_length]++;
   }


}

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