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

Solidity新手求助:捐赠合约编译遇ParserError错误排查

错误排查与修复方案

问题根源

你遇到的ParserError是因为函数定义的语法格式错误:createDonation函数的参数列表闭合括号)和可见性修饰符public之间多了一个空行,Solidity语法要求修饰符必须紧跟在参数括号之后,不能用空行分隔。这个语法错误导致编译器无法正确解析函数结构,进而报错指向后续的大括号。

修正后的完整代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract DonationContract {
    struct Donation {
        string pickupAddress;
        string pickupDate;
        string pickupTime;
        string availabilityDate;
        string pickupHours;
        string itemType;
        string otherItem;
        string itemDescription;
        uint quantity;
        string requiresRefrigeration;
        string bestConsumedDate;
        string partialDonation;
    }

    Donation[] public donations;

    function createDonation(
        string memory _pickupAddress,
        string memory _pickupDate,
        string memory _pickupTime,
        string memory _availabilityDate,
        string memory _pickupHours,
        string memory _itemType,
        string memory _otherItem,
        string memory _itemDescription,
        uint _quantity,
        string memory _requiresRefrigeration,
        string memory _bestConsumedDate,
        string memory _partialDonation 
    ) public { // 将public移至参数括号后,移除中间空行
        Donation memory newDonation = Donation(
            _pickupAddress,
            _pickupDate,
            _pickupTime,
            _availabilityDate,
            _pickupHours,
            _itemType,
            _otherItem,
            _itemDescription,
            _quantity,
            _requiresRefrigeration,
            _bestConsumedDate,
            _partialDonation
        );
        donations.push(newDonation);
    }

    function getDonationCount() public view returns (uint){
        return donations.length;
    }
}

额外优化建议(针对Solidity新手)

  • 对于requiresRefrigeration和partialDonation这类布尔值场景,不要用string存储,改用bool类型,能大幅节省Gas开销,同时更贴合数据逻辑。比如把结构体里的对应字段改成bool requiresRefrigeration;和bool partialDonation;,函数参数也同步调整。
  • 如果需要按索引查询单个捐赠记录,可以新增一个函数:
function getDonation(uint index) public view returns (Donation memory) {
    require(index < donations.length, "Donation does not exist");
    return donations[index];
}

内容的提问来源于stack exchange,提问作者Tinawaa1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:13:36