¿Asignar tipos de variables incompatibles?
Pregunta
Definí esta estructura
typedef struct UNIAO_NOME
{
int vert;
struct un *Pai;
} un;
pero luego, cuando lo intento
int name (un *conj/*pointer to a subset*/)
{
un c;/*subset*/
c = *conj;
while (c.Pai != NULL)
c = *(c.Pai);
return c.vert;
}
el editor dice que
c = *(c.Pai);
está mal, sin embargo c es de tipo un.
Gracias de antemano.
Solución
Tiene dos tipos diferentes: dentro del struct
, lo ha declarado declarado un nuevo tipo un
.Escríbelo así:
typedef struct UNIAO_NOME
{
int vert;
struct UNIAO_NOME *Pai; // refers to this type
} un;
Otros consejos
Nunca defines un struct un
pero solo un identificador un
(sin struct
) que se refiere al tipo struct UNIAO_NOME
.
Usando struct un*
es en realidad una "declaración anticipada" implícita de struct un
.Para el compilador, esto es suficiente para deducir qué tan grande será un puntero a una estructura aún no definida.
Un modismo que se puede utilizar para este tipo de dolores de cabeza es typedef
todas tus estructuras antes su declaración completa:
typedef struct un un;
dism adelante ^^^^^^^^^^^
escriba alias ------------------^^
struct un
{
int vert;
un *Pai;
};