Arrays

TypeError:等式兩邊的組件數量不同

  • October 31, 2020

我正在使用 ERC721 進行項目。下面的程式碼

pragma solidity >=0.4.21 <0.7.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract Sketch is ERC721 {
 string[] public sketchs;
 mapping(string => bool) _sketchExists;
 constructor() ERC721("Sketch", "SKETCH") public {
 }
 function mint(string memory _sketch) public {
   uint _id = sketchs.push(_sketch);
   _mint(msg.sender, _id);
   _sketchExists[_sketch] = true;
 }
}

但是當我 truffle 遷移時,我得到一個 TypeError “左側 (1) 與右側 (0) 的組件數量不同”。因為 uint _id 有 1 而 sketchs 有 0

uint _id = sketchs.push(_sketch);

那是因為我的草圖數組從 0 開始嗎?如果是這種情況,我將如何初始化它呢?任何方向/幫助都會很棒,在此先感謝!

push自 Solidity 0.6 以來,操作已經改變了行為。它不再返回長度,而是返回對添加元素的引用。

您可以通過將分配拆分為兩個操作來解決此問題:

sketchs.push(_sketch);
uint _id = sketchs.length - 1;

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