Jump to content

Erro "multiple definition"


davide92

Recommended Posts

Boas noites a todos, tenho andado aqui de volta do trabalho de algoritmia e de repente apareceu-me este erro "milhares" de vezes. Tenho um estruturas.h assim :

#ifndef ESTRUTURAS_H_INCLUDED
#define ESTRUTURAS_H_INCLUDED
#define MAX 60
/** Estrutura de ligação - INÍCIO */
struct no {
struct no * prox;
struct no * ant;
void * dados;
};
typedef struct no NO;
typedef NO * PNO;
typedef NO ** PPNO;
/** Estrutura de ligação - FIM */
/** FUNCOES PARA AS DATAS - INÍCIO */
typedef struct data //Funcao para a data
{
int dia;
int mes;
int ano;
} DATA;
DATA ler_data()
{
int dia_max;
DATA tmp;
printf("\n\n Ano: ");
printf("\n Mes: ");
do
{
	scanf("%d",&tmp.mes);
	if ((tmp.mes<1) || (tmp.mes>12))
	{
		printf(" Introduziu errado o mes.\n");
		printf(" Intoduza novamente o mes : ");
	}
}
while(tmp.mes<1 || tmp.mes>12);
if (tmp.mes==1||tmp.mes==3||tmp.mes==5||
		tmp.mes==7||tmp.mes==8||tmp.mes==10||
		tmp.mes==12)
	dia_max=31;
else
	if (tmp.mes==4||tmp.mes==6||tmp.mes==9||
			tmp.mes==11)
		dia_max=30;
	else
	{
		if (tmp.mes%4==0)
			dia_max=29;
		else
			dia_max=28;
	}
printf("\n Dia: ");
do
{
	scanf("%d",&tmp.dia);
	if (tmp.dia<1 || tmp.dia>dia_max)
	{
		printf(" Introduziu errado o dia.\n");
		printf(" Introduza novamente o dia : ");
	}
}
while(tmp.dia<1 || tmp.dia>dia_max);
return tmp;
}
/** FUNCOES PARA AS DATAS - FIM */
/** FUNCAO PARA AS HORAS - INÍCIO */
typedef struct horas //Funcao para a data
{
int hora;
int minuto;
} HORAS;
HORAS ler_horas()
{
HORAS tmp;
printf(" Horas: ");
do
{
	scanf("%d",&tmp.hora);
	if((tmp.hora<-1) || (tmp.hora>25))
	{
		printf("Introduziu errado as horas.\n");
		printf("Introduza novamente as horas: ");
	}
}
while (tmp.hora<-1 || tmp.hora>25);
printf(" Minutos: ");
do
{
	scanf("%d",&tmp.minuto);
	if((tmp.minuto<-1) || (tmp.minuto>61))
	{
		printf("Introduziu errado os minutos.\n");
		printf("Introduza novamente os minutos: ");
	}
}
while(tmp.minuto<-1 || tmp.minuto>61);
return tmp;
}
/** FUNCAO PARA AS HORAS - FIM */

/** Estruturas de dados - INÍCIO */
/* Ficha de Especialidade */
struct especialidade {
char nome[MAX];		  // Nome da especialidade
char descricao[MAX];		  // Descricao
struct especialidade * prox;
struct especialidade * ant;
};
typedef struct especialidade ESPECIALIDADE;
typedef ESPECIALIDADE * P_ESPECIALIDADE;
typedef ESPECIALIDADE ** PP_ESPECIALIDADE;
/* Ficha de Utente */
struct utente
{
char nome[MAX];		  // Nome do utente
DATA nascimento;		  // Data de nascimento do utente
int telefone;		  // Telefone do utente
char localidade[MAX];		  // Localidade do utente
char assistencia[MAX];		  // Tipo de assistencia medica do utente
int id;		  // Numero de identificacao do cartao do utente
DATA validade;		  // Validade do cartao do utente
char consultas[MAX];		  // Historico de consultas do utente
struct utente * prox;
struct utente * ant;
};
typedef struct utente UTENTE;
typedef UTENTE * P_UTENTE;
typedef UTENTE ** PP_UTENTE;
/* Ficha de Medico */
struct medico
{
char nome[MAX];		  // Nome do medico
char especialidade[MAX];		  // Especialidade do medico
int nroincricao;		  // Numero de inscricao do medico
char horario[MAX];		  // Horario do medico
HORAS duracaoconsultas;		  // Duracao das consultas
struct medico * prox;
struct medico * ant;
};
typedef struct medico MEDICO;
typedef MEDICO * P_MEDICO;
typedef MEDICO ** PP_MEDICO;
/* Ficha de Consultas */
struct consultas
{
char nome_utente[MAX];		  // Nome do utente
char especialidade_utente[MAX];		  // Especialidade
DATA data_consulta;		   // Data da consulta
char horario_consulta;		   // Horario consulta
struct medico * prox;
struct medico * ant;
};
typedef struct consultas CONSULTAS;
typedef CONSULTAS * P_CONSULTAS;
typedef CONSULTAS ** PP_CONSULTAS;
/** Estruturas de dados - FIM */
#endif // ESTRUTURAS_H_INCLUDED

E tenho um bocado de codigo para o bubblesort:


int nascimentoCres_utente(P_UTENTE a, P_UTENTE b)
{
if(a->nascimento.ano > b->nascimento.ano) return 1;
else return 0;
}


int conta(PNO cabeca)
{
PNO ptr;
int cont=0;
for (ptr=cabeca; ptr; ptr=ptr->prox) cont++;
return cont;
}

/** Ordena com bubblesort */
void bubblesort (PNO cabeca, int (*compara)())
{
PNO ptr;
void * tmp;
int i, tam = conta(cabeca);
for(i=0; i<tam; i++)
{
	for(ptr=cabeca; ptr->prox; ptr=ptr->prox)
	{
		if((*compara)(ptr->dados, ptr->prox->dados))
		{
			tmp = ptr->dados;
			ptr->dados = ptr->prox->dados;
			ptr->prox->dados = tmp;
		}
	}
}
}
/* Funções para ordenação com Bubblesort - FIM */

E tem-me dado os seguintes erros:

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c||In function 'criaMedico':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c|78|warning: format '%d' expects type 'int *', but argument 2 has type 'char (*)[60]'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c|81|warning: format '%d' expects type 'int *', but argument 2 has type 'struct HORAS *'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c||In function 'criaConsultas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c|100|warning: format '%d' expects type 'int *', but argument 2 has type 'struct DATA *'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c|103|warning: format '%d' expects type 'int *', but argument 2 has type 'char *'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c|106|warning: control reaches end of non-void function|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c||In function 'criaMedico':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\criar_fichas.c|84|warning: control reaches end of non-void function|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c||In function 'escreveUTENTES':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|33|warning: format '%d' expects type 'int', but argument 3 has type 'DATA'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|33|warning: too few arguments for format|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|37|warning: format '%s' expects type 'char *', but argument 3 has type 'int'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|38|warning: format '%d' expects type 'int', but argument 3 has type 'DATA'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|38|warning: too few arguments for format|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c||In function 'escreveMEDICOS':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|54|warning: format '%d' expects type 'int', but argument 3 has type 'HORAS'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|54|warning: too few arguments for format|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c||In function 'escreveCONSULTAS':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|67|warning: format '%d' expects type 'int', but argument 3 has type 'DATA'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|67|warning: too few arguments for format|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\escrever_txt.c|68|warning: format '%s' expects type 'char *', but argument 3 has type 'int'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c||In function 'imprime_utente':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|33|warning: format '%d' expects type 'int', but argument 3 has type 'DATA'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|33|warning: format '%d' expects type 'int', but argument 5 has type 'char *'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|33|warning: format '%s' expects type 'char *', but argument 7 has type 'int'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|33|warning: format '%d' expects type 'int', but argument 8 has type 'DATA'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|33|warning: format '%d' expects type 'int', but argument 9 has type 'char *'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|33|warning: too few arguments for format|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c||In function 'imprime_medico':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|41|warning: format '%d' expects type 'int', but argument 6 has type 'HORAS'|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\imprimir.c|41|warning: too few arguments for format|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\main.c||In function 'main':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\main.c|21|warning: unused variable 'fp'|

obj\Debug\escrever_bin.o||In function `ler_data':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|multiple definition of `ler_data'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|first defined here|

obj\Debug\escrever_bin.o||In function `ler_horas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|multiple definition of `ler_horas'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|first defined here|

obj\Debug\escrever_txt.o||In function `ler_data':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|multiple definition of `ler_data'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|first defined here|

obj\Debug\escrever_txt.o||In function `ler_horas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|multiple definition of `ler_horas'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|first defined here|

obj\Debug\imprimir.o||In function `ler_data':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|multiple definition of `ler_data'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|first defined here|

obj\Debug\imprimir.o||In function `ler_horas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|multiple definition of `ler_horas'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|first defined here|

obj\Debug\inserir.o||In function `ler_data':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|multiple definition of `ler_data'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|first defined here|

obj\Debug\inserir.o||In function `ler_horas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|multiple definition of `ler_horas'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|first defined here|

obj\Debug\main.o||In function `ler_data':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|multiple definition of `ler_data'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|first defined here|

obj\Debug\main.o||In function `ler_horas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|multiple definition of `ler_horas'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|first defined here|

obj\Debug\bubblesort.o||In function `ler_data':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|multiple definition of `ler_data'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|26|first defined here|

obj\Debug\bubblesort.o||In function `ler_horas':|

C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|multiple definition of `ler_horas'|

obj\Debug\criar_fichas.o:C:\Users\Davide\Desktop\Projecto Final\Algoritmia\estruturas.h|88|first defined here|

||=== Build finished: 24 errors, 25 warnings ===|

Edited by davide92
Link to comment
Share on other sites

Nao ponhas codigo em ficheiros .h.

Apenas definicoes de tipos (struct XXX {} e typedefs), #defines, e prototipos de funcoes.

No teu exemplo tens duas funcoes que deviam estar num ficheiro .c.

Os prototipos das funcoes podem estar no .h e sao

DATA ler_data(void);
HORAS ler_horas(void);

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

esse erro (normalmente) não tem nada haver com o que tens no ficheiro .h

muito pelo contrário, tem haver com o que tens nos outros

verifica a primeira linha de erro do compilador, essa diz-te toda a informação que necessitas

- onde está declarado a estrutura e onde foi declarada previamente

depois disso segue o processo de includes a ver onde estás a re-declarar a estrutura

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.