Puedo estar equivocado, pero la explicación básica que he encontrado ha sido que la unión no se puede inicializar porque no sabe a qué miembro llamar. El compilador no puede generar automáticamente un constructor para la unión.¿Por qué las uniones anónimas no pueden contener miembros con constructores/destructores no triviales?
¿Por qué el usuario no puede definir el constructor de uniones? Esto eliminaría dicho problema y permitiría la presencia de miembros sindicales que tengan un constructor/destructor no trivial.
Además, ¿por qué un miembro de la unión no puede tener constructores personalizados? La explicación anterior no representa constructores personalizados.
Actualización 1:
Ejemplo:
struct SQuaternion
{
union
{
S3DVector Axis;
struct
{
float X;
float Y;
float Z;
};
};
float W;
};
Nota: El problema aquí parece ser que la unión es anónima. Como tal, ¿cómo se podría nombrar al constructor de la unión? Parece imposible hacerlo, simplemente porque no tiene nombre, y por ninguna otra razón. Sería una razón terrible si fuera un simple problema léxico ...
Actualización 2: Simplemente al envolver al miembro infractor en una estructura anónima envolvente, el error desaparece. Supongo que esto es lo más cercano que se puede hacer con una unión anónima. El hecho de que deja de ser un problema aún parece extraño ...
funciones miembros no están permitidos en las uniones anónimas. Entonces, lo que estás buscando ni siquiera es posible, para empezar. –
Eso es más o menos lo que estaba buscando o si había alguna manera alternativa de manejar esto. –
Las estructuras anónimas 'tampoco están permitidas oficialmente. –