3
respostas

Referencia Indefinida

Pessoal, Estou encontrando esse erro:

undefined reference to 'lerMapa'
undefined reference to 'encontraMapa'
undefined reference to 'imprimeMapa'
undefined reference to 'liberaMapa'

pacman.c:

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

MAPA m;
POSICAO heroi;
int i;

int main(){
    lerMapa(&m);

    encontraMapa(&m, &heroi, '@');

    do{
        imprimeMapa(&m);

        char comando;
        scanf("%c", &comando);
        move(comando);
    }while(!acabou());

    liberaMapa(&m);

    return 0;

//.......
}

mapa.h:

struct mapa {
    char** mapa;
    int linha;
    int coluna;
};
typedef struct mapa MAPA;

void alocaMapa(MAPA* m);
void lerMapa(MAPA* m);
void liberaMapa(MAPA* m);
void imprimeMapa(MAPA* m);

struct posicao {
    int x;
    int y;
};
typedef struct posicao POSICAO;

void encontraMapa(MAPA* m, POSICAO* p, char c);

Alguém sabe oque aconteceu?

3 respostas

Olá Gal, verifique por favor se na hora de compilar, você está compilando todos os arquivos .c's . Pois pode ser que você esteja se esquecendo de compilar o arquivo onde as funções estão escritas.

Otávio, acho que é isso que acabei esquecendo. mas agora, quando vou compilar o mapa.c ele me não compila e me da o seguinte erro:

undefined reference to 'WinMain@16'

Acho eu que ele quer uma main nessa função. Estou usando o CodeBlocks. Segue o código do mapa.c:

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

int i, j;

void encontraMapa(MAPA* m, POSICAO* p, char c){
    for(i = 0; i < m->linha; i++){
        for(j = 0; j < m->coluna; j++){
            if(m->mapa[i][j] == c){
                p->x = i;
                p->y = j;
                break;
            }
        }
    }
}

void imprimeMapa(MAPA* m){
    int i;

    for(i = 0; i < m->linha; i++){
        printf("%s\n", m->mapa[i]);
    }
}

void lerMapa(MAPA* m){
    FILE* f;

    f = fopen("mapa.txt", "r");
    if(f == 0){
        printf("Erro na leitura do mapa\n");
        exit(1);
    }

    fscanf(f, "%d %d", &(m->linha), &(m->coluna));
    printf("linhas: %i\ncolunas: %i", m->linha, m->coluna);

    alocaMapa(m);

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

    fclose(f);
}

void alocaMapa(MAPA* m){
    m->mapa = malloc(sizeof(char*) * m->linha);
    for(i = 0; i < m->linha; i++){
        m->mapa[i] = malloc(sizeof(char) * m->coluna+1);
    }
}

void liberaMapa(MAPA* m){
    for(i = 0; i < m->linha; i++){
        free(m->mapa[i]);
    }
    free(m->mapa);
}

Eu nunca usei o codeblocks, e pelo pesquisei esse erro parece estar ligado com alguma coisa que você pode ter feito quando criou o projeto para depois fazer o código (link do site em inglês: http://stackoverflow.com/questions/20020399/undefined-reference-to-winmain16-codeblocks).

Porém, se o problema continuar, aconselho você a olhar o código do professor e procurar as diferenças.