智能合约constructor出现parsing error错误,寻求问题排查及解决方法

你遇到的Solidity constructor解析错误属于语法层面的编译错误,是编译器无法识别代码结构导致的,常见触发原因和解决方法如下:
- 版本兼容性问题
Solidity 从0.4.22版本才正式支持constructor关键字,若你代码开头的pragma solidity指定的版本低于0.4.22,编译器无法识别该关键字,直接抛出解析错误。
解决方法:将编译版本提升至0.4.22及以上,或改用旧版构造函数写法:使用和合约同名的函数作为构造函数,例如合约名为MyContract时写function MyContract() public {}。 - 构造函数本身语法错误
常见的错误写法包括:- 漏写参数括号、参数列表末尾多写多余逗号、参数类型或命名不符合规范
- 修饰符位置错误,
public/payable/internal等修饰符必须放在参数括号之后,错误示例:constructor public() {} - 构造函数的大括号不配对,漏写开头或结尾的大括号
- 前置代码存在语法问题
若constructor之前的代码有未闭合的大括号、语句末尾漏写分号、符号拼写错误等问题,编译器解析到constructor位置时无法匹配到合法的语法结构,也会在constructor行抛出解析错误,实际错误点和构造函数本身无关。 - 构造函数内部代码语法错误
constructor内部的语句漏写分号、变量声明格式错误、函数调用参数不符合规范等,也会触发该类报错。
排查步骤
- 先确认编译使用的Solidity版本≥0.4.22
- 核对constructor语法结构是否符合标准,示例如下:
// 标准constructor写法 constructor(address _owner, uint _initValue) public payable { owner = _owner; value = _initValue; }
- 暂时注释掉constructor内部的所有代码,若不再报错则逐行排查内部逻辑的语法问题
- 检查constructor之前的所有代码,确认所有大括号配对、所有语句末尾都有分号
内容的提问来源于stack exchange,提问作者qalander
相关产品推荐
相关产品推荐

