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

Solidity编译报错:Expected ';' but got '(' 排查与修复求助

Solidity编译错误解析与提现合约修复

1. 解析"ParserError: Expected ';' but got '('"错误

该错误属于Solidity语法解析错误,意味着编译器在处理代码时,预期当前位置应该是分号;来结束一条语句,但实际却遇到了左括号(。这种情况通常由以下原因引发:

  • 关键字拼写错误(比如函数定义的function写错),导致编译器无法识别合法的语句结构,误将后续内容判定为非法语法
  • 语句结尾遗漏分号,却在错误位置出现了括号,打破了语法规则

2. 提现合约代码修复

原合约存在多处语法拼写错误和逻辑错误,以下是修复后的完整代码:

//SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Withdraw{
    constructor() payable {}
    
    function withdrawByTransfer() public {
        payable(msg.sender).transfer(1 ether);
    }

    function withdrawBySend() public {
        bool success = payable(msg.sender).send(1 ether);
        require(success);
    }

    function withdrawByCall() public returns(bytes memory){
        (bool success, bytes memory result) = payable(msg.sender).call{value: 1 ether}("");
        require(success);
        return result;
    }
}

关键修改点说明:

  • 修正函数关键字拼写:fucntion → function(共三处)
  • 修正 payable 拼写错误:paybale → payable(共三处)
  • 修正以太单位写法:1 eth → 1 ether(Solidity中合法的以太单位是ether)
  • 修正变量名拼写错误:succeess → success(共两处)
  • 修复withdrawByCall的逻辑错误:
    • 原代码中call{value: require(success)}完全不符合语法,改为call{value: 1 ether}("")指定转账金额并调用空函数
    • 添加require(success)校验调用是否成功,确保转账逻辑可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:57:19