Pergunta

Eu defini essa estrutura

typedef  struct UNIAO_NOME
{
     int vert;
     struct un *Pai; 
} un;

mas, então, quando eu tento

int name (un *conj/*pointer to a subset*/)
{
    un c;/*subset*/ 
    c = *conj;
    while (c.Pai != NULL)
        c = *(c.Pai);
    return c.vert;
}

o editor diz que

c = *(c.Pai); 

está errado, porém c é do tipo un.

Desde já, obrigado.

Foi útil?

Solução

Você tem dois tipos diferentes - dentro do struct, você tem declarou um novo tipo un.Escreva assim:

typedef struct UNIAO_NOME
{
     int vert;
     struct UNIAO_NOME *Pai;    // refers to this type
} un;

Outras dicas

Você nunca define um struct un mas apenas um identificador un (sem struct) que se refere ao tipo struct UNIAO_NOME.

Usando struct un* é na verdade uma "declaração antecipada" implícita de struct un.Para o compilador, isso é suficiente para deduzir quão grande será um ponteiro para uma estrutura ainda não definida.

Uma expressão que pode ser usada para esse tipo de dor de cabeça é typedef todas as suas estruturas antes sua declaração completa:

typedef struct un un;

avançar dezembro ^^^^^^^^^^^
digite alias ------------------^^

struct un
{
     int vert;
     un *Pai; 
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top