Teniendo en cuenta lo siguiente:C Unión polimorfismo dentro de matrices
typedef struct{
...
...
} A;
typedef struct{
...
...
} B;
typedef union __attribute__((transparent_union)) {
A a;
B b;
} C;
Si declaro una función
myMethod(C){
...
}
El siguiente es legal sin conversión explícita:
A myA;
B myB;
meMethod(myA);
myMethod(myB);
(a partir de: " c unions and polymorphism ")
Sin embargo, ¿por qué no se permite lo siguiente?
C cArray[2];
c[0]=myA;
c[1]=myB;
Esto produce un error de tipo incompatible sin conversión explícita. ¿Hay alguna forma de evitar el lanzamiento explícito?
Por favor, edite su pregunta ya que no es legal C tal como está. C [2] cArray debería ser C cArray [2]. Entonces c [0] yc [1], deberían ser Array [0] y Array [1]. – betabandido
'transparent_union' solo es transparente al pasar parámetros a las funciones. La documentación de GCC es muy explícita al respecto. –
Siempre puedes simplemente agregar el .a o el .b, pero eso no funciona, ¿verdad? –