Solidity中uint数组push结构体实例报错Member 'Push' not found求助
问题原因
核心错误是数组类型与要添加的元素类型不匹配:
IntArrayTest被声明为uint[](uint类型数组),但你在addElements方法里尝试向它push一个Numbers结构体实例,Solidity不允许跨类型的数组元素添加,因此触发Member 'Push' not found错误(本质是类型不兼容导致push方法无法识别该操作)。
解决方案
根据你的需求,有两种修正方式:
方式一:将数组改为结构体类型
如果你确实需要用Numbers结构体存储数值,把IntArrayTest的类型修改为Numbers[]即可:
pragma solidity ^0.8.7; contract MyTestContarct{ Person[] public people; uint256 public peopleCount; struct Person { string _firstName; string _lastName; } function addPerson(string memory _firstName, string memory _lastName) public{ people.push(Person(_firstName, _lastName)); peopleCount +=1; } // 修改为Numbers结构体数组 Numbers[] IntArrayTest; uint256 public elementsCounter; struct Numbers{ uint _number; } function addElements(uint _number) public{ IntArrayTest.push(Numbers(_number)); elementsCounter +=1; } }
方式二:简化为直接存储uint值
如果Numbers结构体仅用来存储单个uint数值,完全可以省略结构体,直接向uint[]数组push数值:
pragma solidity ^0.8.7; contract MyTestContarct{ Person[] public people; uint256 public peopleCount; struct Person { string _firstName; string _lastName; } function addPerson(string memory _firstName, string memory _lastName) public{ people.push(Person(_firstName, _lastName)); peopleCount +=1; } uint[] IntArrayTest; uint256 public elementsCounter; function addElements(uint _number) public{ IntArrayTest.push(_number); elementsCounter +=1; } }
内容的提问来源于stack exchange,提问作者Mike Richard
相关产品推荐
相关产品推荐

