Договор наследования

Я действительно надеюсь, что это не глупый вопрос.

Я пытаюсь вызвать конструкторы унаследованных контрактов в такой структуре:

 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 с двумя переменными?

Ответы (1)

Я считаю, что этот точный сценарий описан в 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 ; 
     } 
 }