Должна ли функция конструктора быть публичной?

Во всех уроках, которые я смотрю, никто не указывает public, но remix представляет предупреждения о том, что видимость функции не была указана, и предполагается public.

Поскольку я не люблю предупреждения, если это возможно, я указываю public при необходимости, но мне интересно, должна ли сама функция конструктора быть public или private. Мне кажется, что он должен быть частным, так как он автоматически вызывается самим договором о создании, или мои рассуждения ошибочны?

Ответы (2)

Когда вы пытаетесь скомпилировать контракт с private конструктором, например, этот:

 pragma solidity ^ 0.4 . 15 ; contract PrivateConstructor   { 
     string   public  title ; 

     function   PrivateConstructor ()   private   { title =   "Private Constructor" ; 
     } 

 } 

Вы получаете эту ошибку:

TypeError: Constructor must be public or internal.

Похоже, контрактор может быть только public или internal .

Подробнее здесь Видимость и добытчики

При использовании внутреннего: «Этот контракт не реализует все функции и, следовательно, не может быть создан».
@Nico, это может быть немного поздно, но при использовании «внутреннего» контракт помечается как абстрактный, то есть он может использоваться только как базовый и не сможет компилироваться сам по себе. Вы должны будете унаследовать договор и реализовать все функции в производном договоре. Если вы не реализуете все функции, производный контракт также будет помечен как абстрактный, что вызовет ту же проблему.

Конструктор может быть внутренним или общедоступным; однако если конструктор имеет модификатор payable, тогда конструктор может быть только открытым.

Что касается внутренней видимости, это позволяет абстрактному контракту иметь конструктор.