Ir para conteúdo
Fórum Script Brasil
  • 0

Erro no linker?


Ark

Pergunta

Galera é o seguinte, toh começando a estudar estrutura de dados. Com isso, tava queredo criar um arquivo de cabeçalho pra ter minhas funções de retirada e inserção de elemento e etc.

Mas quando eu compilo dá uns erros chatos:

"[Linker error] undefined reference to `display_stack'

[Linker error] undefined reference to `push_stack'

[Linker error] undefined reference to `pop_stack'"

Vou colocar o cabeçalho aqui:

stack.h

void push(int *stack, int *top, int *tam);
void pop(int *stack, int *top);
void display_stack(int *stack, int *tam);

void push_stack(int *stack, int *top, int tam){
    if(top<tam){
        printf("Elemento a ser inserido: ");
        scanf("%d", &stack[top]);
        top+=1;
    }
    else printf("A pilha tah cheia.\n");
}
void pop_stack(int *stack, int *top){
    if(top>0){
        top-=1;
        stack[*top] = 0;
    }
    else printf("A pilha tah vazia.\n");
}
void display_stack(int *stack, int tam){
    int x;
    for(x=tam-1;x>=0;x--) printf("%d\n", stack[x]);
}
pilha.c
#include <stdio.h>
#include <stack.h>
#define tam 15
main(){
    int stack[tam], op, top=0;
    do{
        system("cls");
        printf("Digite uma opcao: ");
        printf("1. Mostrar pilha;\n2. Adicionar elemento.\n3.Retirar elemento;\n4. Sair.");
        scanf("%d", &op);
        switch(op){
            case 1: display_stack(stack, tam);
                    break;
            case 2: push_stack(stack, &top, tam);
                    break;
            case 3: pop_stack(stack, &top);
        }
    }
    while(op!=4);
    getch();
}

Por quê do erro?

Obrigado pela atenção.

Abraço.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Existem duas formas de incluir arquivos:

#include <library.h>
Usando os sinais de maior e menor, inclui-se uma biblioteca nativa do C, como stdio.h, stdlib.h. Outra forma é usando aspas:
#include "library.h"
Assim se inclui uma biblioteca própria. Essa deve ser a forma como você deve incluir stack.h. ;) Outra coisa: nos *.h, coloque apenas os protótipos das funções. As respectivas implementações devem ser feitas em arquivos .c. Logo, tenha um stack.c e um stack,.h. E prefira definir uma constante em cada .h, evitando múltiplas inclusões: stack.h
#ifndef _STACK_H_
#define _STACK_H_

contéudo do .h

#endif

Link para o comentário
Compartilhar em outros sites

  • 0
Outra coisa: nos *.h, coloque apenas os protótipos das funções. As respectivas implementações devem ser feitas em arquivos .c. Logo, tenha um stack.c e um stack,.h.

E prefira definir uma constante em cada .h, evitando múltiplas inclusões:

stack.h

#ifndef _STACK_H_
#define _STACK_H_

contéudo do .h

#endif

No meu caso como eu faria? Pra incluir o meu stack.c no header que ia conter só os protótipos?

Se não for pedir muito gostaria que você explicasse melhor essa parte.

Obrigado pela ajuda.

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
Todos os header files têm apenas os protótipos das funções. Pode abrir o stdio.h, por exemplo, para ver. ;)

Você implementa as funções em stack.c e coloca no stack.h os protótipos delas.

Aí no pilha.c você inclui com asas

#include "stack.h"

Entendeu?

Entendi, mas como o meu header vai saber que é pra "buscar" o código das funções no stack.c?

Eu tenho que estabelecer algum vinculo entre os dois ou o compilador já vai saber?

Eu vou "dizer" pro compilador que o código fonte das funções tá no stack.c se eu colocar no mesmo dir da stack.h que é o include?

Editado por Ark
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...