You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向parents列表添加空Parent实例?遇UnimplementedFeatureError报错

解决Solidity中UnimplementedFeatureError:动态数组从memory复制到storage的问题

这个错误其实是Solidity当前的特性限制导致的——你试图用memory中的动态数组去初始化storage结构体里的动态数组,而当前Solidity版本还不支持这种直接的跨内存区域复制操作。

问题根源

你的代码里parents.push(Parent(new Child[](0)))这一行,new Child[](0)创建的是一个memory类型的空数组,而Parent结构体里的children是storage类型的动态数组。Solidity不允许直接把memory的动态数组赋值给storage的动态数组,尤其是在结构体初始化的场景下,这就触发了那个未实现特性的错误。

解决方法

其实你完全不需要显式创建那个memory数组!因为当你初始化Parent结构体时,它的children动态数组默认就是空的。直接用下面两种方式之一即可解决问题:

方法1:直接push默认的Parent实例

contract Test {
    struct Child { }
    struct Parent { Child[] children; }
    Parent[] parents;

    function test() public {
        // 直接push,Solidity会自动初始化children为空的storage数组
        parents.push();
    }
}

方法2:显式使用结构体默认初始化语法

contract Test {
    struct Child { }
    struct Parent { Child[] children; }
    Parent[] parents;

    function test() public {
        // 用{}显式初始化结构体,children会默认是空数组
        parents.push(Parent({}));
    }
}

扩展:给children添加元素

之后如果要给某个Parent的children数组添加元素,直接操作storage里的数组即可,完全没问题:

function addChildToParent(uint parentIndex) public {
    // 直接向storage中的children数组push新元素
    parents[parentIndex].children.push(Child({}));
}

内容的提问来源于stack exchange,提问作者Jonas H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:31:56