问题描述
这是我的代码,我试图创建一个包含两个映射的结构并将这些结构插入到映射中:
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;
}
}
但是我在Remix的第28行(circulo [id] = newUsuario;)遇到以下错误:
TypeError:包含(嵌套)映射的存储中的类型不能为 分配给。 circulo [id] = newUsuario;
非常感谢您事先提供的帮助,对于我的英语,我很抱歉,我来自西班牙。如果解决方案仅是显而易见的话,那么我对稳固性和智能合同还是陌生的。
解决方法
从v.7.0开始,您不能分配包含嵌套映射的结构。相反,您可以做的是创建像这样的新实例,然后将值分配给该结构的属性!
Usuario storage newUsuario = circulo[id];
numUsuarios++;
newUsuario.id = id;
newUsuario.debe[idDebe] = valDebe;
newUsuario.leDebe[idLeDebe] = valLedebe;