首页 > 解决方案 > 无法构造包含(嵌套)映射的结构。坚固

问题描述

我使用solidity版本pragma solidity 0.8.6;

我有一个这个结构:

   struct Request {
    string description;
    uint256 value;
    address recipient;
    bool complete;
    uint256 approvalCount;
    mapping(address => bool) approvals;
}

当我需要为该结构创建实例时,它会向我显示此错误:

无法构造包含(嵌套)映射的结构

    Request memory newRequest = Request({
        description: description,
        value: value,
        recipient: recipient,
        complete: false,
        approvalCount: 0
    });

当我需要转移时,它会显示这个错误:

       request.recipient.transfer(request.value);

“发送”和“转移”仅适用于“应付地址”类型的对象,而不适用于“地址”。

有什么问题 ?我怎么解决这个问题 ?

标签: soliditysmartcontracts

解决方案


从 Solidity v0.7.0 开始更改(不安全功能)

如果它们包含映射,则对存储中的结构或数组的赋值不起作用。以前,在复制操作期间会默默地跳过映射,这是误导且容易出错的。

请参阅v0.7.0 重大更改: https ://docs.soliditylang.org/en/v0.8.9/070-break-changes.html

编辑:解决方案:首先将您的结构实例添加到存储中


推荐阅读