覆盖 Solidity 中的函数

Override functions in Solidity

我尝试使用子合约创建智能合约并覆盖从另一个接口派生的另一个函数。

这是示例代码:

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

interface Base1 {
    function h() external public {}
}

interface Base2 {
    function f() external public {}
}

contract Inherited is Base1 {
    function h() external override {}
    function f() external override {}
}

我收到此错误:“TypeError:函数已指定覆盖但未覆盖任何内容。”在函数 f() 中。

我知道可以通过在合约中添加Base2(继承的合约是Base1,Base2)并在每个函数中指定接口来解决。但是,还有另一种方法可以在不添加 Base2 的情况下覆盖函数 f() 吗?

那是因为您需要向覆盖函数添加一些功能。

is there another way to override function f() without adding Base2?

你不能覆盖不存在的东西。

在此上下文中 (Inherited is Base1),函数 f() 的唯一定义是 Inherited 合同中的定义。

一个快速的解决方案是删除 override 修饰符,因为该函数实际上不会覆盖任何内容。