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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:01:37