When I try to make a.bin file it gives multiple definition error in all functions

Asked

Viewed 247 times

0

In the Linux i use the following command lines to run all 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, 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 file. c:

#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;
}

inserir a descrição da imagem aqui

1 answer

1


First of all, your file aluno.h, for being a header file, it is good practice to use macros to prevent the file from being imported multiple times to the project.

#ifndef ARQUIVO_H
#define ARQUIVO_H

/*
* Conteúdo 
*/

#endif

#pragma once

// conteúdo

And the error by multiple definitions is because you are importing the file aluno.c inside teste.c.

The files of Source (*.c), should not be imported into #include <>, to import them must specify next to the compilation.

gcc aluno.c -c -o aluno.o
gcc teste.c -c -o teste.o
gcc teste.o aluno.o -o projeto

# ou

gcc aluno.c teste.c -o projeto

Browser other questions tagged

You are not signed in. Login or sign up in order to post.