solidity truffle 异常Expected pragma, import directive or contract
solidity在truffle中或在remix中进行编译执行时会出现Expected pragma, import directive or contract异常。
异常情况一
{ contracts: {}, errors: [ ':1:1: ParserError: Expected pragma, import directive or contract /interface/library definition.\nD:\\RND\\BlockChain\\contracts\\Inbox.sol\n^\n' ],sourceList: [ '' ],sources: {} }
类似这种异常主要是因为solidity版本问题导致,在不同的版本构造器有所不同。当solc <= v0.4.25时,构造方法使用类似如下:
function Inbox(string passedName) public
而在solc > v0.4.25时,构造方法的写法为如下方式:
constructor(string passedName) public
情况二:如果在remix下出现如下异常:
1:5: Error- Expected import directive or contract definition. function owned() { ^
这种问题,主要考虑代码格式是否正确,solidity的版本是否声明等原因。
情况三:缺少toString方法。
异常信息:
{ contracts: {}, errors: [ ':1:1: ParserError: Expected pragma, import directive or contract/interface /library definition.\nVoting.sol\n^\n' ], sourceList: [ '' ], sources: {} }
可能原因,solidity开头没有声明版本信息,如下格式:
pragma solidity ^0.4.17;
或者没有toString()方法。
情况四:编码问题导致
异常信息如下:
Compiling a file errors with :1:1: Error: Expected import directive or contract definition
相关源代码:
let contractsFile = path.join(__dirname, '../contracts/contracts.sol'); var fileContract = fs.readFileSync(contractsFile, { encoding: 'utf-8' }); _**--- fileContract.length = 3532**_ var output = solc.compile(fileContract.toString(), 1);
有可能是编码错误导致的。可通过以下方式尝试:
1、IDE,比如(VS Code),选择编码为UTF-8。
2、关闭IDE,重新再打开对应文件。确保已经保存为UTF-8格式。
情况五:低级错误导致
比如copy过来的代码,缺少“;”等。导致如下异常:
Solidity: ParserError: Expected pragma, import directive or contract/interface/library definition.
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2019/10/29/solidity-truffle-expected-error/