Надежность: проблема с созданием структуры, содержащей сопоставления внутри сопоставления

#struct #mapping #solidity #smartcontracts #remix

#структура #сопоставление #надежность #smartcontracts #ремикс

Вопрос:

Это мой код, в котором я пытаюсь создать структуру, содержащую два сопоставления, и вставить структуры в сопоставление:

 pragma solidity ^0.7.2;

contract Campaign {
    struct Usuario {
        string id;
        mapping(string => uint) debe;
        mapping(string => uint) leDebe;
        
    }
    
    Usuario[] public usuarios;
    uint numUsuarios;
    mapping(string => Usuario) public circulo;
    
    constructor () {
        
    }
    
    function usuarioPrueba(string memory id, string memory idDebe, uint valDebe, string memory idLeDebe, uint valLedebe) public {
        
        usuarios.push();
        Usuario storage newUsuario = usuarios[numUsuarios];
        numUsuarios  ;
        newUsuario.id = id;
        newUsuario.debe[idDebe] = valDebe;
        newUsuario.leDebe[idLeDebe] = valLedebe;
        
        circulo[id] = newUsuario;
    }
   
}
  

но я получаю следующую ошибку в строке 28 (circulo[id] = newUsuario;) в Remix:

Ошибка типа: типы в хранилище, содержащие (вложенные) сопоставления, не могут быть назначены. circulo[id] = newUsuario;

Большое вам спасибо за помощь заранее, и я прошу прощения за свой английский, я из Испании, и если решение просто очевидно, я новичок в solidity и смарт-контрактах.

Ответ №1:

Начиная с версии 0.7.0, вы не можете назначать структуры, содержащие вложенные сопоставления. Вместо этого вы можете создать новые экземпляры, подобные этому, а затем присвоить значения свойствам структуры!

  Usuario storage newUsuario = circulo[id];
    numUsuarios  ;
    newUsuario.id = id;
    newUsuario.debe[idDebe] = valDebe;
    newUsuario.leDebe[idLeDebe] = valLedebe;