Realmente espero que esta no sea una pregunta tonta.
Estoy tratando de llamar a los constructores de los contratos heredados en una estructura como esta:
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 ;
}
}
Si intento compilarlo en Remix, aparece el siguiente error:
TypeError : Exactly one argument expected for explicit type conversion B ( _a , _b );
¿Por qué no puedo llamar al constructor de B con dos variables?
Creo que este escenario exacto está cubierto por Solidity: Inheritance> Arguments for Base Constructors
Aquí está el ejemplo que dan:
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 {}
}
Entonces, para usted, se vería así:
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 ;
}
}