Solidity

在映射中返回結構

  • May 27, 2022

嗨,我正在研究使用結構映射函式。擁有這個:

struct Persona{
   string Nombre;
   uint Edad;
}

mapping (uint => Persona) RelacionID;

function GuardarID(uint ID, string memory NombrePersona, uint EdadPersona) public{
   RelacionID[ID] = Persona(NombrePersona, EdadPersona);
}

function VerPersona(uint verID) public view returns(Persona){
   return RelacionID[verID];
}

這條線有問題:

function VerPersona(uint verID) public view returns(Persona)

混音 說:

TypeError: Data location must be "memory" or "calldata" for return parameter in function, but none was given.
 --> Estructura de datos/mappings.sol:45:57:
  |
45 |     function VerPersona(uint verID) public view returns(Persona){
  |                                                         ^^^^^^^

任何答案對我都有好處,謝謝!

當您必須返回非原始數據時,例如:數組、結構……您必須使用記憶體、儲存和呼叫數據等關鍵字來定義變數將儲存的數據區域。在這種情況下,您可以使用記憶體。您必須以這種方式更改您的智能合約:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract MintWithERC20 {
  struct Persona{
       string Nombre;
       uint Edad;
   }

   mapping (uint => Persona) RelacionID;

   function GuardarID(uint ID, string memory NombrePersona, uint EdadPersona) public{
       RelacionID[ID] = Persona(NombrePersona, EdadPersona);
   }

   function VerPersona(uint verID) public view returns(Persona memory){
       return RelacionID[verID];
   }
} 

有關數據儲存的更多資訊,請點擊此處

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