Compilar Tipos Abstratos de dados [RESOLVIDO]

1. Compilar Tipos Abstratos de dados [RESOLVIDO]

Eduardo Matias
EduardoLM

(usa Debian)

Enviado em 05/06/2016 - 10:24h

Bom dia, estou com um problema em juntar vários arquivos para executar um programa em C, simplesmente o compilador não reconhece outros arquivos a não ser a main.c, ja pesquisei muito na internet, mas ainda não obtive exito, sei que tenho que indicar ao compilador todos os arquivos que fazem parte do programa, estou fazendo assim:

gcc main.c file2.c file3.h -o teste

então, o compilador não reconhece o tipo abstrato criado por mim, o pior que eu não sei se é erro de lógico ou do compilador, por isso estou vindo aqui pedir ajuda, então se alguém pudesse me ajudar, ficaria agradecido. Programa que estou tentando executar:

//O programa apenas lê uma coordenada e imprime invertida

-----------------------------------------

MAIN. C

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


int main() {

TPonto *p = (TPonto*)malloc(sizeof(TPonto));

printf("Informe uma coordenada do plano\n");

scanf("%f %f", &p->x, &p->y);

inverte(p);

return (0);
}

PONTO.C

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

struct ponto
{
float x, y;
};

void inverte (TPonto *pp)
{
printf("Coordenadas invertidas\n%f\n%f\n", pp->y, pp->x);
}

PONTO.H

#ifndef PONTO_H
#define PONTO_H

#include <stdlib.h>

typedef struct ponto TPonto;

void inverte (TPonto *pp);

#endif

--------------------------------------------------------------

ERRO:

main.c: In function ‘main’:
main.c:8:40: error: invalid application of ‘sizeof’ to incomplete type ‘TPonto’
TPonto *p = (TPonto*)malloc(sizeof(TPonto));
^
main.c:12:22: error: dereferencing pointer to incomplete type
scanf("%f %f", &p->x, &p->y);
^
main.c:12:29: error: dereferencing pointer to incomplete type
scanf("%f %f", &p->x, &p->y);
^
main.c:14:5: warning: passing argument 1 of ‘inverte’ from incompatible pointer type [enabled by default]
inverte(&p);
^
In file included from main.c:3:0:
ponto.h:8:6: note: expected ‘struct TPonto *’ but argument is of type ‘struct TPonto **’
void inverte (TPonto *pp);




  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/06/2016 - 12:46h

eduardomr escreveu:

Quando eu crio a estrutura no arquivo .h, o programa funciona sem problemas.


Seu erro desde o início foi esse. Você dizia que TPonto correspondia a um estrutura, mas não explicitava essa estrutura em lugar nenhum. Sem saber a forma do tipo de dados, o compilador não pode criar objetos desse tipo, nem saber o tamanho (com sizeof) de dados desse tipo.

Outra coisa: na sua mensagem original você colocou um arquivo de cabeçalho (sufixo .h) como parte da lista de arquivos a serem compilados, e isso não faz sentido, porque arquivos de cabeçalho não devem produzir nenhum código objeto, uma vez que eles devem conter apenas declarações, e não implementações.

3. Re: Compilar Tipos Abstratos de dados [RESOLVIDO]

Eduardo Matias
EduardoLM

(usa Debian)

Enviado em 05/06/2016 - 11:12h

Quando eu crio a estrutura no arquivo .h, o programa funciona sem problemas.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts