gpt4 book ai didi

solidity - 尚不支持将 struct memory[] 类型的内存复制到存储

转载 作者:行者123 更新时间:2023-12-04 17:15:29 25 4
gpt4 key购买 nike

如何将新的空 Parent 实例添加到以下代码示例中的父项列表中?我不断得到

UnimplementedFeatureError: Copying of type struct Test.Child memory[] memory
to storage not yet supported.

最小的例子:
contract Test {
struct Child { }
struct Parent { Child[] children; }

Parent[] parents;

function test() {
parents.push(Parent(new Child[](0)));
}
}

最佳答案

你真的不能用动态数组做你想做的事情。你需要稍微改变你的方法才能让它工作。

contract Test {
struct Child { }
struct Parent {
mapping(uint => Child) children;
uint childrenSize;
}

Parent[] parents;

function testWithEmptyChildren() public {
parents.push(Parent({childrenSize: 0}));
}

function testWithChild(uint index) public {
Parent storage p = parents[index];

p.children[p.childrenSize] = Child();
p.childrenSize++;
}
}

使用 Parent.childrenSize如果您需要遍历 Parent.children在你契约(Contract)的其他地方。

或者,您可以增加 parents 的大小数组并使用 Solidity 的默认零值。
contract Test {
struct Child { }
struct Parent { Child[] children; }

Parent[] parents;

function test() public {
parents.length++;
Parent storage p = parents[parents.length - 1];

Child memory c;

p.children.push(c);
}
}

关于solidity - 尚不支持将 struct memory[] 类型的内存复制到存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com