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

Posted

技术标签:

【中文标题】Solidity:在映射中创建包含映射的结构时出现问题【英文标题】:Solidity: problem creating a struct containing mappings inside a mapping 【发布时间】: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 和智能合约有点陌生。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Solidity:在映射中创建包含映射的结构时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

智能合约语言 Solidity 教程系列6 - 结构体与映射

使用一对多映射保存对象时出现 Spring + Hibernate id 问题

错误3004:从行开始映射片段时出现问题

智能合约语言 Solidity 教程系列6 - 结构体与映射

插入到自动映射生成的 ORM 时出现 SQLAlchemy InvalidRequestError

解析序列/映射节点时出现无效的 yaml 节点错误