Compilation 实体错误:无法构造包含(嵌套)映射的结构

Compilation 实体错误:无法构造包含(嵌套)映射的结构,compilation,ethereum,solidity,Compilation,Ethereum,Solidity,我的solc版本: "solc": "^0.7.1", 当我尝试构造包含映射的结构时,出现以下错误: “无法构造包含(嵌套)映射的结构” 这是我的密码 运动索尔 contract Campaign { struct Request { ... // I guess this might cause an error mapping(address => bool) approvals; } constructor(uin

我的solc版本:

    "solc": "^0.7.1",
当我尝试构造包含映射的结构时,出现以下错误: “无法构造包含(嵌套)映射的结构”

这是我的密码

运动索尔

contract Campaign {
struct Request {
    ...
// I guess this might cause an error
    mapping(address => bool) approvals;

}

constructor(uint256 minimum, address creator) {
    ...
}

function createRequest(
    string memory description,
    uint256 value,
    address payable recipient
) public onlyManager {
    Request memory newRequest = Request({ 
        // Here the compiler complains 
    });
}
...
如果我想在我的请求结构中放置一个映射,还有其他方法吗? 谢谢

我想我找到了答案

我将映射放在
结构的外部,错误消失了:

contract Campaign {
    struct Request {
        //...
    }
    mapping(address => bool) approvals;

我不确定它是否完全解决了这个问题。如果有其他问题,我将进行更新。

从0.7.0开始,请执行以下操作:

    struct Request{
            string description;
            uint value;
            address recipient;
            bool complete;
            uint approvalsCount;
            mapping(address => bool) approvals;
        }
        
    uint numRequests;
    mapping (uint => Request) requests;
    
    function createRequest (string memory description, uint value,
            address recipient) public{
                Request storage r = requests[numRequests++];
                r.description = description;
                r.value = value;
                r.recipient = recipient;
                r.complete = false;
                r.approvalsCount = 0;
            
        }