Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Undefined reference to ...

Pessoal, estou tentando compilar meu programa, mas na função principal ele da erro, undefined reference to lemapa' undefined reference toimprimemapa' undefined reference to `liberamapa'

Alguém pode me ajudar?

Segue código abaixo

FogeFoge.C

#include <stdio.h> /* biblioteca printf*/
#include <stdlib.h> /*biblioteca do system*/
#include <conio.h> /* biblioteca getch e getche*/ 
#include <locale.h> /*biblioteca de caracteres especiais*/

#include "FogeFoge.h"
#include "mapa.h"




MAPA m;

int main (){//inicio do programa

    setlocale(LC_ALL,""); // programa vai se adaptar ao idioma do sistema operacional assim é possivel usar caracter especial

    char comando;

    lemapa(&m);

    do {

        imprimemapa(&m);

        scanf(" %c", &comando);

        move(comando); 

    }while (!acabou());

    liberamapa(&m);

    system ("pause");
    return 0;
}// final do programa



int acabou (){
    return 0;
}
void move(char direcao){
    int x;
    int y;
    int i, j;

    for (i = 0; i < m.linhas ; i++){
        for (j = 0 ; j < m.colunas ; j++){
            if (m.matriz[i][j] == '@'){
                x = i;
                y = j;
                break;
            }
        }
    }

    switch (direcao){
        case 'a':
            m.matriz[x][y-1] = '@'; // esqueda
            break;
        case 'w':
            m.matriz[x -1][y] = '@'; // cima
            break;
        case 'd':
            m.matriz[x][y + 1] = '@'; //direita
            break;
        case 's':
            m.matriz[x+1] [y] = '@'; //baixo
            break;
        }
    m.matriz[x][y] = '.';
}

MAPA.C

#include <stdio.h> /* biblioteca printf*/
#include <stdlib.h> /*biblioteca do system*/
#include <conio.h> /* biblioteca getch e getche*/ 
#include <locale.h> /*biblioteca de caracteres especiais*/

#include "mapa.h"

void lemapa (MAPA* m){
    FILE *f;    
    int i;
    f = fopen("mapa.txt", "r");

        if (f == 0){
            printf("Jogo não pode ser carregado\n");
            exit(1);
        }

    fscanf(f, "%d %d", &(m->linhas), &(m->colunas));

    alocamapa(m);    

    for (i=0 ; i < m->linhas ; i++){

        fscanf(f, "%s", m->matriz[i]);
    }

    fclose(f);    
}
void alocamapa(MAPA *m){
    int i;

        m->matriz = malloc(sizeof(char*) * m->linhas);

    for(i = 0 ; i < m->colunas ; i++){
        m->matriz[i] = malloc(sizeof(char)  * (m->colunas + 1));
    }
}
void liberamapa(MAPA* m){
    int i;

for (i = 0 ; i < m->linhas ; i++){
    free(m->matriz[i]);    
    }

    free(m->matriz);
}
void imprimemapa(MAPA* m){
    int i;
    for (i =0 ; i < m->linhas ; i++){

        printf("%s\n", m->matriz[i]);
    }

}

MAPA.H

struct mapa{
    char **matriz;
    int linhas;
    int colunas;
};

typedef struct mapa MAPA;

void alocamapa(MAPA *m);
void lemapa(MAPA *m);
void liberamapa(MAPA *m);
void imprimemapa(MAPA *m);

FOGEFOGE.H

int acabou();
void move (char direcao);

Ja tentei praticamente de tudo, mas não consigo encontrar o erro.

4 respostas

Cesar, o problema é que o programa está separado em partes e o compilador não consegue encontrar todas as partes sozinho. Você precisa fazer a compilação em partes, deste modo:

$ gcc mapa.c -o mapa.o
$ gcc FogeFoge.c -o FogeFoge.o
$ gcc mapa.o FogeFoge.o -o FogeFoge

Assim, você garante que cada parte foi compilada individualmente antes de gerar o programa final.

Outra alternativa é fazer tudo na mesma linha:

$ gcc mapa.c FogeFoge.c -o FogeFoge

O importante é passar todos os arquivos de implementação que você criou!

Marco.

Problema é que eu uso o DEV, será que eu consigo compilar mais de um programa nele ou é melhor trocar?

Obrigado!

solução!

Nunca utilizei Dev-C++, então não saberei responder, mas sei que é uma IDE meio desatualizada.

Tente usar o Code::Blocks, foi uma das soluções que encontrei buscando no Google.

Consegui com o Code Blocks!

Obrigado, Marco!!