You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:04