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

问题描述

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

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;