Solidity Error: Struct containing a (nested) mapping cannot be constructed
Solidity Error: Struct containing a (nested) mapping cannot be constructed
我的 solc 版本:
"solc": "^0.7.1",
当我尝试构造一个包含映射的结构时,出现了这个错误:
“无法构造包含(嵌套)映射的结构”
这是我的 solidity 代码。
Campaign.sol
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
});
}
...
如果我想在我的 Request 结构中放置一个映射,还有其他方法吗?
谢谢
我想我找到了答案here
我将映射放在 struct
之外,错误消失了:
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;
}
我的 solc 版本:
"solc": "^0.7.1",
当我尝试构造一个包含映射的结构时,出现了这个错误: “无法构造包含(嵌套)映射的结构”
这是我的 solidity 代码。
Campaign.sol
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
});
}
...
如果我想在我的 Request 结构中放置一个映射,还有其他方法吗? 谢谢
我想我找到了答案here
我将映射放在 struct
之外,错误消失了:
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;
}