Ir ao conteúdo
  • Cadastre-se
Adao Henrique

Erro: referência indevida

Recommended Posts

Bom, estou com um erro que não consigo identificar a causa dele. Se alguém poder me ajudar eu agradeço.

Eis o código.

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

int main(){
    Lista *lista;
    int valor, i, numero_de_celulas;

    lista= criar_lista_vazia;

    scanf("%d%d", &valor, &numero_de_celulas);

    for(i=0;  i<numero_de_celulas;  i++){
        inserir_valor(&lista, valor);      //o erro está nesta linha.
        valor= valor+2;                        //está linha é simplesmente para que a lista não tenha todos os termos de mesmo valor.
    }
    return 0;
}

Agora o arquivo lista_ligadah.c (eles estão em arquivos diferentes, lista_ligadah é a biblioteca que criei)

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

void inserir_valor(Lista **inicio, int valor){
    Lista *celula = malloc( sizeof ( Lista ));
    celula->conteudo=  valor;
    celula->prox=  *inicio;
    *inicio=  celula;
}

Lista é o tipo de dado que criei.

typedef struct lista{
    int conteudo;
    struct lista *prox;
} Lista;

 

o arquivo .h está correto, então achei melhor não coloca-lo, juntamente com a função criar_lista_vazia para não sobrecarregar a leitura.

 

o algoritmo cria uma lista ligada com a função criar_lista_vazia, e  depois preenche com  n termos (numero_de_celulas),

uso o codeblocks 13.12 no ubuntu 16.04.

 

este é o erro: main.c|14|referência indefinida para `inserir_valor'|

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejo coisas estranhas tipo na função void inserir_valor(Lista **inicio, int valor) inicio é um ponteiro duplo, e que em main você está tentando passar um ponteiro simples, mas como você não postou o source completo não posso fazer provas para lhe ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu entendimento os argumentos e os parâmetros estão compatíveis.

Meio enrolado, mas o que posso dizer é que o código, primeiro código que contem a função main

está fazendo referencia (chamando) uma função que não possui definição (não existe).

Observe o código abaixo que reflete aproximadamente o problema em questão:

/* PARA fórum Clube do Hardware */
/*@authr Mauro Britivaldo */
#include <stdio.h>


//Prototipos de Função
int num(int** ptrint);

/** Função principal que abre o programa */
int main(void)
{
    int *iptr;
    int **prt;          //Ponteiro para outro ponteiro
    int *vect[10];      //Vetor com 10 ponteiros mesmo que **prt 10x
    int Array[10][10];  //Vetor com 10 ponterios com 10 int cada

        prt = vect;
        vect[0] = Array[0];

        num(&iptr);     //referência(chamou) mais não Defininda (Sem corpo)
        num(prt);       //Mesmo #erro
        return 0;
}

A função main não enxerga definição (corpo) da função num, que se encontra indefinida para num,

mesmo problema que você tem aí beleza a função inserir_valor não tem corpo!

Eu acho que o conflito é com a estrutura do projeto os arquivos .h .c .o não estão ligados corretamente, tente iniciar um novo projeto para que assim corrija o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×