Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

(.text+0x...): undefined reference to ...

Ao terminal essa aula e compila-la, o prompt de comando apontou os seguintes erros:

C:\Users\ricar\Desktop\C-programmer\C-III>gcc fogefoge.c
C:\Users\ricar\AppData\Local\Temp\ccm3udh6.o:fogefoge.c:(.text+0x201): undefined reference to `lemapa'
C:\Users\ricar\AppData\Local\Temp\ccm3udh6.o:fogefoge.c:(.text+0x210): undefined reference to `imprimemapa'
C:\Users\ricar\AppData\Local\Temp\ccm3udh6.o:fogefoge.c:(.text+0x249): undefined reference to `liberamapa'
collect2.exe: error: ld returned 1 exit status

Já tentei compilar o zip dessa aula e aconteceu o mesmo erro.

Segue o código:

fogefoge.c

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

MAPA m;

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

    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] = '@';
            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);
}

mapa.c

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

int i,j;

void lemapa(MAPA* m){
    FILE* f;
    f = fopen("mapa.txt", "r");
    if (f == 0) {
        printf("Falha no carregamento do arquivo\n");
        exit(1);
    }
    fscanf(f, "%d %d", &(m->linhas), &(m->colunas));
    printf("linhas %d colunas %d\n", m->linhas, m->colunas);

    alocamapa(m);

    for(i = 0; i < 5; i++){
        //mapa[i] = passa a linha toda caso nao tiver outro parametro da matriz
        fscanf(f, "%s", m->matriz[i]);
    }
    fclose(f);
}

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

void liberamapa(MAPA* m){

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

void imprimemapa(MAPA* m){
    for(i = 0; i < 5; i++){
        printf("%s\n", m->matriz[i]);
    }
}

fogefoge.h

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

mapa.h

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

};
typedef struct mapa MAPA;

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

Baixei o Dev-C++ 5.11 para rodar no cmd. Uso o sublime como editor.

1 resposta
solução!

Olá Ricardo,

Como o código agora é composto por mais de um arquivo .c, você precisa compilar os dois arquivos e juntá-los em um único executável.

Você pode executar o seguinte comando para isso:

gcc fogefoge.c mapa.c -o fogefoge.out

Faça o teste e veja se funciona!