Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Oliveira de Lima

error: dereferencing pointer to incomplete type|

Recommended Posts

Olá pessoal,

 

Olha o noob se atrapalhando de novo. rs

 

Estou inciando o estudo de TAD e modularização e mal comecei e já me deparei com o erro descrito acima no título do tópico.

 

Criei um header definindo uma constante, um typedef para um tipo struct lista e protótipos de função. Depois criei um arquivo .c com as funções e fui testar no main e deu esse erro.

 

O devo estar fazendo de errado?

 

Seguem os códigos:

 

Do header ListaEstatica.h:

#define MAX 100

typedef struct lista Lista;

Lista *cria_lista();
void libera_lista(Lista *li);

ListaEstatica.c

#include <stdlib.h>
#include <stdio.h>
#include "ListaEstatica.h"

struct lista{

    int qtd;
    int num[MAX];

};

Lista *cria_lista(){

    Lista *li = (Lista*)malloc(sizeof(struct lista));
    if(li!=NULL)
        li->qtd = 0;
    return li;

}

e no main.c que criei só para testar e ele já de cara acusou esse erro

#include <stdio.h>
#include <stdlib.h>
#include "ListaEstatica.h"

int main()
{
    Lista *l = cria_lista();

    printf("%d",l->num[0]);
    return 0;
}

Se puderem ajudar desde já, agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mova a definição da "struct lista" de "ListaEstatica.c" para "ListaEstatica.h" de preferência que ela fica acima do typedef.

 

Isso acontece porque "main.c" sabe que "Lista" é um typedef de "struct lista" mas ele não sabe quem é "struct lista" porque "struct lista" só está visível para "ListaEstatica.c".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mova a definição da "struct lista" de "ListaEstatica.c" para "ListaEstatica.h" de preferência que ela fica acima do typedef.

 

Isso acontece porque "main.c" sabe que "Lista" é um typedef de "struct lista" mas ele não sabe quem é "struct lista" porque "struct lista" só está visível para "ListaEstatica.c".

Funcionou. Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.