Я часто определяю союзы внутри функций следующим образом:
union
{
sometype A;
othertype B;
}name;
а затем обойти их, как:
name.A = smth;
name.B = smthelse;
и хотя он работает в режиме отладки, в режиме выпуска он сообщает, что объединение не инициализировано, а в некоторых местах, где члены объединения являются указателями, даже происходит сбой. Так как я могу их инициализировать? Достаточно просто добавить ‘=’ операторы? Разве это не должен иметь конструктор по умолчанию в любом случае?
От Вот,
Вы можете объявить и инициализировать объединение в одном и том же
присваивание выражения, заключенного в фигурные скобки. Выражение
оценивается и присваивается первое поле объединения.
Ну вот так:
union NumericType
{
int iValue;
long lValue;
double dValue;
};
union NumericType Values = { 10 }; // iValue = 10
Но это чаще встречается (и многие скажут лучше) сделать
union NumericType val; // declaration
val.dValue = 3.1415; // use union as a double
Вы получаете ошибки, потому что вы, кажется, используете union
как будто это struct
🙂
Пожалуйста, поправьте меня, если я ошибаюсь, но прочитайте Вот, например.
Других решений пока нет …