Это именно то, что говорит компилятор: он не может сгенерировать конструктор по умолчанию или оператор присваивания для вашей структуры, потому что в нем есть const
член (const bool fooBool
). Элементы структуры, которые const
или являются ссылками, не могут быть инициализированы по умолчанию, поэтому они должны быть явно инициализированы в пользовательском конструкторе или операторе присваивания.
Одним из решений является написание собственного конструктора по умолчанию и оператора присваивания (и в соответствии с правилом из трех , вы также должны написать конструктор копирования; деструктор не является строго необходимым, но это хорошая практика ). Альтернативное, более простое решение - просто сделать fooBool
non- const
. Затем компилятор с радостью сгенерирует для вас конструктор по умолчанию и оператор присваивания.
Поскольку вы уже создаете массив из const
их экземпляров с помощью static const fooStruct foo[] = ...
, дополнительные const
для fooBool
не имеют смысла.