Solidity,Solc 错误:无法构造包含(嵌套)映射的结构

Posted

技术标签:

【中文标题】Solidity,Solc 错误:无法构造包含(嵌套)映射的结构【英文标题】:Solidity, Solc Error: Struct containing a (nested) mapping cannot be constructed 【发布时间】:2020-11-20 00:47:54 【问题描述】:

我正在使用 npm 安装的 Solc 版本 0.7.0。当我尝试创建包含映射的 Struct 时,收到错误消息:“无法构造包含(嵌套)映射的结构。”

请检查代码:

// SPDX-License-Identifier: MIT
pragma solidity 0.7.0;

contract Test 
    struct Request 
        uint256 value;
        mapping(address => bool) approvals;
    
    Request[] public requests;
      ...

    function createRequest(
        uint256 value
    ) public 
        Request memory newRequest = Request(// here the compiler complains
            value: value
        );

        requests.push(newRequest);
    

当我使用旧版本的 solc 时,代码编译没有问题。

提前谢谢你!

【问题讨论】:

你可以参考这个ethereum.stackexchange.com/a/97883/68718以获得更好的清晰度 【参考方案1】:

这应该可行:

function createRequest(uint256 value) public 
    Request storage newRequest = requests.push();
    newRequest.value = value;

干杯!

【讨论】:

【参考方案2】:

这在我的情况下有效:

struct Request
    uint256 value;
    mapping(address => bool) approvals;

            
uint256 numRequests;
mapping (uint256 => Request) requests;
        
function createRequest (uint256 value) public
    Request storage r = requests[numRequests++];
    r.value= value;

【讨论】:

以上是关于Solidity,Solc 错误:无法构造包含(嵌套)映射的结构的主要内容,如果未能解决你的问题,请参考以下文章

solidity(solc)智能合约升级到0.5*遇到的问题

错误:Truffle 当前使用的是 solc 0.5.16,但您的一个或多个合约指定“pragma solidity ^0.8.0”

Py-solc 和 Solidity 导入

solc 编译Solidity

Solidity、solc、web3.js、Ganache 版本组合目前正在使用啥

以太坊区块链 Solidity solc是什么