Solidity编译报错「重写函数缺少override修饰符」问题求助
错误产生原因
- Solidity从0.6版本开始新增了函数重写的显式声明要求:当合约继承了接口或者父合约,并且在子合约中重新实现了父级已经定义过的同名、同参数、同返回值的函数时,必须显式添加
override修饰符,告知编译器这是主动重写操作,不是意外定义的重名函数。 - 你的代码中
TTKN合约继承了IERC20接口,接口中已经预先定义了totalSupply、balanceOf、allowance、approve、transfer、transferFrom这6个函数,你在TTKN中实现这些函数时没有加override修饰符,因此触发了编译器报错。
修复方法
只需要给TTKN合约中对应的6个重写函数添加override修饰符即可,修改后的函数声明如下:
function totalSupply() public view override returns (uint256) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public view override returns (uint256 balance) { return balances[tokenOwner]; } function allowance(address tokenOwner, address spender) public view override returns (uint256 remaining) { return allowed[tokenOwner][spender]; } function approve(address spender, uint256 tokens) public override returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transfer(address to, uint256 tokens) public override returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } function transferFrom(address from, address to, uint256 tokens) public override returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; }
可选优化说明
你的代码pragma指定了兼容0.7到0.9版本的Solidity,0.8及以上版本已经内置了算术运算的溢出/下溢检查,不需要额外引入SafeMath库,可以直接删除SafeMath的继承和相关调用,直接用+、-、*、/运算符即可,代码会更简洁。
内容的提问来源于stack exchange,提问作者JDS
相关产品推荐
相关产品推荐

