База знаний / Справочник TiOS / Разработка (TiOS) / Руководство по программированию / Tibbo BASIC/C / Переменные, указатели, константы, области видимости / Массивы, структуры, объединения
Ограничения на использование строк в объединениях
В Tibbo C объединения не могут включать строковые члены или структуры, среди членов которых есть строки:
struct packet_x{
unsigned char packet_type;
string dt(20); //here is a member string
};
packet_x p_x; //a structure with a string member -- this is OK
...
union packet{
packet_x p_x; //this will generate an error (not a POD-type") -- packet_x has a string member
...
};
struct mega_struct{
packet_x p_x; //this member is a structure with a string member -- this is OK
...
};
Причина ограничения в том, что строковые переменные включают метаданные (текущую длину и ёмкость), которые могут стать недопустимыми из-за манипуляций с объединением (например, можно было бы установить текущую длину > ёмкости).
Соответствующая ошибка компилятора выглядит так в панели Output:
(prj)\c.tc(19) : error C1203: invalid union member type: ' struct p_x' is not a POD-type
«POD» означает «plain old data» (простые старые данные). Строки содержат метаданные, поэтому не являются «plain old data».