Linux I use the following command lines to run all the files:
gcc -c aluno.c // gera o arquivo objeto com extensão .o de mesmo nome
gcc -c teste.c
gcc -o prog.bin teste.o aluno.o //para criar o arquivo prog.bin com a junção dos arquivos aluno e teste
After I run these command lines, the multiple-definition error appears (I put the error image at the end of the question)
Student file.h:
/* TAD: Aluno (matricula, nome, curso) */
typedef struct aluno Aluno;
/* Aloca e retorna um aluno com os dados passados por parâmetro */
Aluno *novo(int matricula, char *nome, char *curso);
/* Libera a memória de um aluno previamente criado */
void libera(Aluno *aluno);
/* Copia os valores de um aluno para as referências informadas */
void acessa(Aluno *aluno, int *matricula, char *nome, char *curso);
/* Atribui novos valores aos campos de um aluno */
void atribui(Aluno *aluno, int matricula, char *nome, char *curso);
/* Retorna o tamanho em bytes do TAD aluno */
int size();
Student file c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aluno.h"
typedef struct aluno{
int matricula;
char nome[50];
char curso[20];
}Aluno;
Aluno *novo(int matricula, char *nome, char *curso){
Aluno *a;
a=malloc(sizeof(Aluno));
a->matricula=matricula;
strcpy(a->nome,nome);
strcpy(a->curso,curso);
}
void libera(Aluno *aluno){
free(aluno);
}
void acessa(Aluno *aluno, int *matricula, char *nome, char *curso){
matricula=(int*)&aluno->matricula;
nome=(char*)&aluno->nome;
curso=(char*)&aluno->curso;
}
void atribui(Aluno *aluno, int matricula, char *nome, char *curso){
aluno->matricula=matricula;
strcpy(aluno->nome,nome);
strcpy(aluno->curso,curso);
}
int size(){
return (int)sizeof(Aluno);
}
Test.c file:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aluno.h"
#include "aluno.c"
int main(){
Aluno *a;
a=malloc(sizeof(size()));
a=novo(123,"victhor","computacao");
int *matricula;
char *nome, *curso;
acessa(a,matricula,nome,curso);
printf("Matrícula: %d\n",*matricula);
printf("Nome: %s\n", nome);
printf("Curso: %s\n", curso);
return 0;
}