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

17

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

请检查代码:

// 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时,代码可以编译而无需任何问题。 提前致谢!

1
您可以参考此链接 https://ethereum.stackexchange.com/a/97883/68718 以获得更好的理解。 - Ayan
2个回答

13

这应该可以工作:

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

干杯!


8

在我的情况下这个方法有效:

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接