dereferencing pointer to incomplete type

dereferencing pointer to incomplete type

por Martin Ichilevici de Oliveira -
Número de respostas: 2
Estou tendo um erro de compilação com a função le_entrada. Abaixo parte do código:

Polinomio p, q;
...
q = cria_monomio (coef, exp);
p->prox = q;

Recebo o erro
dereferencing pointer to incomplete type
ao fazer
p->prox = q

Dentro do polinomio.c, há o trecho
typedef struct termo {
double coef;
int exp;
struct termo *prox;
} Termo;

O polinomio.h, por outro lado, contém:
typedef struct termo *Polinomio;

Quando copio o typedef do polinomio.c para o cliente.c, paro de receber o erro.
Em resposta à Martin Ichilevici de Oliveira

Re: dereferencing pointer to incomplete type

por Francisco Reverbel -
Esse erro aparece por causa do p->prox no seu cliente. Esse tipo de coisa não pode aparecer no cliente. O cliente não sabe (e nem deve saber!) que um polinômio é uma lista ligada e muito menos que as células da lista ligada tem um campo prox.

Não copie o typedef do polinomio.c para o cliente.c! Em vez disso, faça o seu cliente usar somente as funções da interface da biblioteca. No caso da função le_polinomio, faça-a construir um polinômio somando os monômios correspondentes aos termos desse polinômio (usando a função soma, que está na interface da biblioteca).

Toda a manipulação de listas encadeadas deve estar dentro do arquivo biblioteca.c! É por isso que o arquivo visto pelos clientes (o arquivo polinomio.h) não contém a definição da estrutura Termo!