solidity Error:linearization of inherintance graph impossable

在下面的代码中,Solidity会报错:“Linearization of inheritance graph impossible”。code

// 如下代码没法编译

pragma solidity >=0.4.0 <0.7.0;

contract X {}
contract A is X {}
contract C is A, X {}

缘由是C要求X来重写A(定义AX这个顺序),但A自己的要求重写X,这是一个矛盾,不能解决。继承

多继承和线性化(Multiple Inheritance and Linearization)。Solidity是沿用Python的方式, 使用C3线性化,在基类的DAG强制使用特定的顺序。这致使单调但不容许某些继承关系。特别是,is指令中给出父类的顺序很重要ip

一个简单的规则是要指定父类中的顺序从左到右为“most base-like”到“most derived”。it