Solidity
很難理解為什麼我的錯誤告訴我我的函式是一個視圖,即使我沒有聲明它?
正如標題所示,
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