Solidity

函式中參數的數據位置必須是“memory”或“calldata”,但沒有給出

  • March 14, 2022

首先看看我的簡單程式碼,以便我可以通過給出參考來解釋

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract GeoSpatialData{
   
   struct GeoData{
       uint id;
       address owner_address;
       string data_name;
       string data_year;
       string data_description;
       string data_img_url;
       string data_url;
       string data_category;
       string data_published_date;
   }
   GeoData[] public geoData;
   // write function
   function createData(string memory _data_name,address _owner_address,string _data_year,string _data_description,string _data_image_url,string _data_url,string _data_published_date ) public{


      
   }

   

   // read all data  function
   function readData() public{

   }

   // read single data function 
   function readSingle() public{

   }

}

現在我有一個 GeoData 結構,你可以看到我想要創建一個對象,所以我肯定需要參數,同時在創建數據中傳遞它們我收到錯誤數據位置必須是“記憶體”或“calldata”用於函式中的參數,但沒有給出我從課程中學習創建對象的方法這裡是github的連結,其程式碼啟發我編寫這樣的程式碼..我還有一個疑問是儲存所有數據在一個數組中,我不能儲存為類對象的好主意,solidity 有這些程式思想

您必須將數據位置類型設置為函式參數並返回以確定數據在您將呼叫的函式的生命週期內的位置。“memory” & “calldata” & “storage”,將確定函式參數數據的儲存位置以及數據的放置位置,以便函式返回可以返回這些數據。

觀看這些影片和範常式式碼以更好地理解:>

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