У меня проблема с определением s_arr[10]
, который должен быть массивом объектов структуры, в то время как структура содержит перечисление и член объединения:
enum E {ENUM_A,ENUM_B};
union U {
String s;
char c[4];
};
struct S {
E e;
U u;
};
S s_arr[10];
Я пытался решить эту проблему в разных пути, но ни один из них не работал. По сути, я получаю следующую ошибку компиляции:
sketch_mar16a:13:11: error: use of deleted function 'S::S()'
S s_arr[10];
^
/.../sketch_mar16a.ino:8:8: note: 'S::S()' is implicitly deleted because the default definition would be ill-formed:
struct S {
^
sketch_mar16a:8:8: error: use of deleted function 'U::U()'
/.../sketch_mar16a.ino:4:7: note: 'U::U()' is implicitly deleted because the default definition would be ill-formed:
union U {
^
sketch_mar16a:5:10: error: union member 'U::s' with non-trivial 'String::String(const char*)'
String s;
^
sketch_mar16a:8:8: error: use of deleted function 'U::~U()'
struct S {
^
/.../sketch_mar16a/sketch_mar16a.ino:4:7: note: 'U::~U()' is implicitly deleted because the default definition would be ill-formed:
union U {
^
sketch_mar16a:5:10: error: union member 'U::s' with non-trivial 'String::~String()'
String s;
^
sketch_mar16a:13:11: error: use of deleted function 'S::~S()'
S s_arr[10];
^
/.../sketch_mar16a/sketch_mar16a.ino:8:8: note: 'S::~S()' is implicitly deleted because the default definition would be ill-formed:
struct S {
^
sketch_mar16a:8:8: error: use of deleted function 'U::~U()'
/.../sketch_mar16a.ino: In function 'void __static_initialization_and_destruction_0(int, int)':
sketch_mar16a:13:3: error: use of deleted function 'S::~S()'
S s_arr[10];
^
exit status 1
use of deleted function 'S::S()'
К сожалению, я не понимаю, где сообщение об ошибке пытается указать мне. Я пытался определить инициализаторы для участвующих классов, но я не знаю, как (или где) определить инициализатор для объединения.
Используя Google, я нашел только случаи, когда объединение содержит структуру, но Я не смог найти решение для моей проблемы.
Можете ли вы объяснить мне, почему «определение по умолчанию будет неправильно сформировано»? Как будет выглядеть определение по умолчанию и когда во время компиляции это произойдет? ПРИМЕЧАНИЕ: код скомпилирован для arduino uno с использованием Arduino IDE