Solidity:创建包含映射内部映射的结构时出现问题

jua*_*nez 4 mapping struct solidity smartcontracts remix

这是我的代码,我试图创建一个包含两个映射的结构并将结构插入到映射中:

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;
    }
   
}
Run Code Online (Sandbox Code Playgroud)

但我在 Remix 上的第 28 行 (circulo[id] = newUsuario;) 收到以下错误:

类型错误:无法分配包含(嵌套)映射的存储中的类型。circulo[id] = newUsuario;

非常感谢您事先的帮助,我对我的英语感到抱歉,我来自西班牙,如果解决方案很明显,那么我对 Solidity 和智能合约有点陌生。

小智 10

从 v 0.7.0 开始,您无法分配包含嵌套映射的结构。相反,您可以做的是创建像这样的新实例,然后将值分配给结构的属性!

 Usuario storage newUsuario = circulo[id];
    numUsuarios++;
    newUsuario.id = id;
    newUsuario.debe[idDebe] = valDebe;
    newUsuario.leDebe[idLeDebe] = valLedebe;
Run Code Online (Sandbox Code Playgroud)