【问题标题】:Solidity: problem creating a struct containing mappings inside a mappingSolidity:在映射中创建包含映射的结构时出现问题
【发布时间】:2021-01-19 19:31:49
【问题描述】:

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

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;

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

【问题讨论】:

    标签: struct mapping solidity smartcontracts remix


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2020-12-29
      • 2020-11-20
      • 2021-04-18
      • 2018-07-08
      • 2022-07-11
      • 1970-01-01
      相关资源
      最近更新 更多