Я действительно надеюсь, что это не глупый вопрос.
Я пытаюсь вызвать конструкторы унаследованных контрактов в такой структуре:
contract A {
uint a ;
constructor ( uint _a ) public { a = _a ;
}
} contract B is A {
uint b ;
constructor ( uint _a , uint _b ) public { A ( _a ); b = _b ;
}
} contract C is B {
uint c ;
constructor ( uint _a , uint _b , uint _c ) public { B ( _a , _b ); c = _c ;
}
}
Если я пытаюсь скомпилировать его в Remix, я получаю следующую ошибку:
TypeError : Exactly one argument expected for explicit type conversion B ( _a , _b );
Почему я не могу вызвать конструктор B с двумя переменными?
Я считаю, что этот точный сценарий описан в Solidity: Inheritance> Arguments для базовых конструкторов.
Вот пример, который они дают:
pragma solidity ^ 0.4 . 22 ; contract Base {
uint x ;
constructor ( uint _x ) public { x = _x ; }
} contract Derived2 is Base {
constructor ( uint _y ) Base ( _y * _y ) public {}
}
Так что для вас это будет выглядеть примерно так:
pragma solidity ^ 0.4 . 22 ; contract A {
uint a ;
constructor ( uint _a ) public { a = _a ;
}
} contract B is A {
uint b ;
constructor ( uint _a , uint _b ) A ( _a ) public { b = _b ;
}
} contract C is B {
uint c ;
constructor ( uint _a , uint _b , uint _c ) B ( _a , _b ) public { c = _c ;
}
}