Solidity

TypeError:變數的數據位置必須是“storage”、“memory”或“calldata”,但沒有給出

  • March 24, 2022

我正在嘗試將地址映射到結構對象。初始化結構時出現以下錯誤:TypeError:變數的數據位置必須是“儲存”、“記憶體”或“呼叫數據”,但沒有給出。

這是我的程式碼:

//SPDX-License-Identifier: NONE
pragma solidity ^0.8.7;
contract DropSite {
   uint public value = 123;
   
   struct NFT_Owner{
     string  name;
     uint nft_id;
   }
   mapping(address => NFT_Owner) public NFT_Ownership;
   address[] public NFT_Owners;

   function addValues( string memory _name, uint _nft_id) public {

     NFT_Owner owner = NFT_Owner({name:_name , nft_id: _nft_id}) ;
     
     NFT_Ownership[msg.sender] = owner;
     NFT_Owners.push(0xdD870fA1b7C4700F2BD7f44238821C26f7392148);
   }
    
 }

錯誤是:TypeError:變數的數據位置必須是“storage”、“memory”或“calldata”,但沒有給出。–> 合約/Transfer.sol:15:7: | 15 | NFT_Owner 所有者 = NFT_Owner({name:_name , nft_id: _nft_id}) ;

有人請幫忙嗎?

 NFT_Owner owner = NFT_Owner({name:_name , nft_id: _nft_id}) ;

從 Solidity 0.5.x 開始

結構、數組或映射類型的所有變數的顯式數據位置現在是強制性的。

NFT_Owner memory owner = NFT_Owner({name:_name, nft_id: _nft_id});

您需要添加memory關鍵字

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