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

可参看文章:https://stackoverflow.com/questions/53941422/solidity-parsererror-expected-pragma-import-directive-or-contract-interface

情况二:如果在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.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注