Solidity 解析器错误:应为 ';'但得到“是”

问题描述

我一直在学习solidity,但是,我还是个新手。目前我正在制作一个 ERC20 代币,但我在这样做时遇到了一些困难。这是我所拥有的。

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

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";

Contract GToken is ERC20 {
    constructor(string memory name,string memory symbol)
        ERC20("GToken","GTKN") public {
            _mint(msg.sender,1000000 * 10 ** uint(decimals));
        
}

我在尝试编译合同时收到的错误如下:

解析器错误:应为 ';'但得到“是”--> GToken.sol:7:21: | 7 |合约 GToken 为 ERC20 { | ^^

解决方法

您的代码中有两个语法错误:

  • contract 应该是小写,而不是 Contract
  • constructor 缺少右大括号 }

然后您将遇到 uint(decimals) 的类型转换错误。当您查看远程合约时,您会看到 decimals() 是一个视图函数 - 而不是一个属性。因此,您应该像调用函数一样读取它的值:decimals()


综合起来:

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

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
// removed the IERC20 import,not needed in this context

contract GToken is ERC20 {
    constructor(string memory name,string memory symbol) ERC20("GToken","GTKN") public {
        _mint(msg.sender,1000000 * 10 ** decimals()); // calling the `decimals()` function
    }
}