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

Problema ao tentar executar o arquivo .c

C:\Users\felip\AppData\Local\Temp\ccI0Fwmn.o:fogefoge.c:(.text+0x130): undefined reference to lemapa' C:\Users\felip\AppData\Local\Temp\ccI0Fwmn.o:fogefoge.c:(.text+0x13c): undefined reference toimprimemapa' C:\Users\felip\AppData\Local\Temp\ccI0Fwmn.o:fogefoge.c:(.text+0x175): undefined reference to `liberamapa'

Sempre que tento executar o arquivo fogefoge.c ele dá esta mensagem de erro a cima, já tentei puxar o terminal e colocar está linha: gcc fogefoge.c mapa.c -o fogefoge.out, porem ele não faz nada, sera que tenho que colocar outra coisa em seguida de compilar?

fogefoge.c

#include <stdio.h>
#include <stdlib.h>
#include "fogefoge.h"
#include "mapa.h" // Mude para #include "mapa.c"

MAPA m;


int acabou() {
    return 0;
}

void move(char direcao) {
    int x;
    int y;

    for(int i = 0; i < m.linhas; i++) {
        for(int 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] = '@';
            break;
        case 'w':
            m.matriz[x-1][y] = '@';
            break;
        case 's':
            m.matriz[x+1][y] = '@';
            break;
        case 'd':
            m.matriz[x][y+1] = '@';
            break;
    }

    m.matriz[x][y] = '.';
}

int main() {

    lemapa(&m);

    do {
        imprimemapa(&m);

        char comando;
        scanf(" %c", &comando);

        move(comando);

    } while (!acabou());

    liberamapa(&m);
}

fogefoge.h

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

mapa.c

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

void lemapa(MAPA* m) {
    FILE* f;
    f = fopen("mapa.txt", "r");
    if(f == 0) {
        printf("Erro na leitura do mapa");
        exit(1);
    }

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

    for(int i = 0; i < m->linhas; i++) {
        fscanf(f, "%s", m->matriz[i]);
    }

    fclose(f);
}

void alocamapa(MAPA* m) {
    m->matriz = malloc(sizeof(char*) * m->linhas);

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

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

    free(m->matriz);
}

void imprimemapa(MAPA* m) {
    for(int 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);
2 respostas
solução!

Olá, Luis! Tudo bem?

Como esse é um programa com partes separadas, devemos compilar da seguinte maneira:

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

Dessa forma conseguimos ter certeza que todas as partes que são necessárias para o programa final foram compiladas antes.

Caso o problema não seja solucionado, estou à disposição.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Obrigado, logo apos que compilei ele me deu apenas um alerta que era para mudar o #include do arquivo fogefoge.c que seria de mapa.h para mapa.c