Jon*_* H. 5 solidity smartcontracts
如何在下面的代码示例中将新的空Parent实例添加到父项列表中?我一直在
UnimplementedFeatureError: Copying of type struct Test.Child memory[] memory
to storage not yet supported.
Run Code Online (Sandbox Code Playgroud)
最小的例子:
contract Test {
struct Child { }
struct Parent { Child[] children; }
Parent[] parents;
function test() {
parents.push(Parent(new Child[](0)));
}
}
Run Code Online (Sandbox Code Playgroud)
你不能真正做你想用动态数组做的事情.您需要稍微改变一下方法才能使其正常工作.
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++;
}
}
Run Code Online (Sandbox Code Playgroud)
使用Parent.childrenSize,如果你需要通过迭代Parent.children在合同中其他地方.
或者,您可以增加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);
}
}
Run Code Online (Sandbox Code Playgroud)