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 Marlon Ribas Vismari -
Não seria Polinomio *q ai invés de Polinomio q ?
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!
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!