Atribuindo tipos de variáveis incompatíveis?
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.
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;
};