Solidity创建结构体数组遇UnimplementedFeatureError,求解决方法
问题原因与修复方案
问题原因
Solidity当前版本不支持直接将memory中的结构体数组字面量赋值给storage类型的动态数组。你代码里的IncrementalPrice[] price是存储在链上的storage动态数组,而右侧的[IncrementalPrice(...), ...]是内存里的临时数组,编译器暂未实现这种跨存储区域的直接复制逻辑,因此抛出UnimplementedFeatureError。
修复方案
方案1:在构造函数中逐个添加元素(适合动态数组)
把数组初始化逻辑放到合约构造函数里,通过push方法逐个将结构体实例添加到storage数组中,这是最常用的动态数组初始化方式:
contract Test { struct IncrementalPrice{ uint256 prices; uint256 threshold; } IncrementalPrice[] price; constructor() { price.push(IncrementalPrice(0, 1000)); price.push(IncrementalPrice(0.01 ether, 2000)); } }
方案2:使用固定长度storage数组(适合元素数量固定的场景)
如果你的数组元素数量不会变化,可以声明为固定长度的storage数组,此时可以直接用字面量赋值:
contract Test { struct IncrementalPrice{ uint256 prices; uint256 threshold; } IncrementalPrice[2] price = [ IncrementalPrice(0, 1000), IncrementalPrice(0.01 ether, 2000) ]; }
内容的提问来源于stack exchange,提问作者Willy
相关产品推荐
相关产品推荐

