Herencia de contrato

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?

Respuestas (1)

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 ; 
     } 
 }