Arrays
TypeError:等式兩邊的組件數量不同
我正在使用 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;