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

如何调试Solidity智能合约开发过程中的Parser Error错误

错误修复说明

你的代码存在4处可直接导致编译报错的问题,以及1处逻辑缺失问题,修复方案如下:

  • mapping定义使用了HTML转义后的=>符号,Solidity语法要求映射的键值分隔符直接写=>
  • 0.4.22之后的Solidity版本不再支持「构造函数名与合约名一致」的写法,必须统一使用constructor关键字定义构造函数,且0.8.x版本构造函数默认权限为public,无需额外加public修饰符
  • 构造函数的动态数组参数movieNames没有显式指定数据位置,0.8.x版本要求引用类型的函数参数必须标注memory或calldata
  • voteForMovie函数只有读取mapping的逻辑,没有实现投票累加的功能
  • 语法细节:数组类型和参数名之间缺少空格,不符合Solidity编码规范

修复后完整代码

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

contract Rating { 
    mapping (bytes32 => uint8) public ratingsReceived;
    bytes32[] public movieList; 
    
    constructor(bytes32[] memory movieNames) { 
        movieList = movieNames;
    }

    function totalVotesFor(bytes32 movie) view public returns (uint8) {
        return ratingsReceived[movie]; 
    } 

    function voteForMovie(bytes32 movie) public { 
        ratingsReceived[movie] += 1;
    }
}

Remix调试验证步骤

  1. 将修复后的代码粘贴到Remix编辑器,选择0.8.10及以上版本的Solidity编译器即可正常编译通过
  2. 部署合约时,在构造函数参数栏传入转换为bytes32格式的电影名数组即可完成初始化
  3. 调用voteForMovie方法传入对应电影的bytes32值完成投票,调用totalVotesFor即可查询对应电影的累计票数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:57:00