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.

¿Fue útil?

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; 
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top