Solidity

很難理解為什麼我的錯誤告訴我我的函式是一個視圖,即使我沒有聲明它?

  • October 24, 2022

正如標題所示,setNFTData()我的函式內部的tokenURI()函式給了我錯誤Function cannot be declared as view because this expression (potentially) modifies the state.,即使我沒有將其稱為視圖。誰能幫我理解為什麼會發生這個錯誤?我已經檢查了其他問題,但在我的情況下沒有任何答案。

uint256 _user_nft_number;

function setNFTData(uint256 _itemID) public {
       _user_nft_number = _itemID;
       console.log(_user_nft_number);
   }

   // Set the NFT's metadata
   function tokenURI(uint256 _tokenId) public view override returns (string memory) {
       require(_exists(_tokenId));
       setNFTData(_tokenId);
       return string(
           abi.encodePacked(
               "data:application/json;base64",
               string.concat("data:application/json;base64")
           )
       );
   }

發生這種情況是因為您的tokenURI函式被聲明為,view但它也試圖呼叫setNFTData修改狀態 ( _user_nft_number = _itemID) 的函式。因此,您會收到此錯誤:因此,如果要在其中呼叫函式,則Function cannot be declared as view because this expression (potentially) modifies the state.需要刪除函式view中的修飾符。tokenURI``setNFTData

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