#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;