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”