Hebang
(usa Arch Linux)
Enviado em 29/10/2010 - 21:28h
Fairplay:
Você está construindo seu código um pouco errado.
O jeito "certo" seria criar um arquivo .h com o cabeçalho da função cadastra, um .c que implementa essa cadastra (dando include no .h é claro) e, no main, você inclui o .h.
Seu código ficaria assim:
cadastra.h:
#ifndef CADASTRA_H
#define CADASTRA_H
#include <stdio.h>
// extern informa que o código deve estar disponivel para todos que incluirem o cadastra.h,
// impedindo que a função seja redeclarada. Esse é o erro que o compilador está reclamando :)
extern int cadastra();
#endif
cadastra.c:
#ifndef CADASTRA_C
#define CADASTRA_C
#include "cadastra.h"
int cadastra()
{
int opc;
printf("\n\n\t\tMenu:\n");
printf("\t\t--------------\n");
printf("\t\t[1] Inserir\n",
"\t\t[2] Buscar\n",
"\t\t[3] Listar\n",
"\t\t[4] Remover\n",
"\t\t[0] Sair\n",
"\t\t\t>> ");
scanf("%d",&opc);
getchar();
return (0);
}
#endif
main.c:
#ifndef MAIN_C
#define MAIN_C
#include <stdio.h>
#include <mysql/mysql.h>
#include "cadastra.h"
int main()
{
MYSQL conexao;
mysql_init(&conexao);
if(mysql_real_connect(&conexao, "localhost","root",
"root", "agenda", 0, NULL, 0))
{
printf("Conectado com sucesso!\n");
cadastra();
mysql_close(&conexao);
}
else
{
printf("Houve uma falha ao tentar conectar! \n");
printf("Erro: %d %s\n",mysql_errno(&conexao),
mysql_error(&conexao));
}
return (0);
}
#endif
Para compilar, você vai fazer:
gcc -o cadastra -c cadastra.c (esse comando gera um arquivo cadastra.o, que será utilizado abaixo)
gcc -o executavel cadastra.o
Quando você tiver outros códigos .h + .c, basta repetir o primeiro gcc acima para cada .c e, no último gcc, coloque todos os .o no final, separados por espaços. Por exemplo:
gcc -o abc -c abc.c
gcc -o xyz -c xyz.c
gcc -o hij -c hij.c
gcc -o executavel abc.o xyz.o hij.o
Esse é o padrão, e permite que, quando você alterar algum código, tenha que recompilar só o que alterou, e não o projeto todo.
Seguindo esses passos, seu problema será resolvido e evitará muuuuito erros futuros (além de deixar o seu código mais padronizado).
E nunca se esqueca o #ifndef no comeco do código, como coloquei no exemplo acima. Isso impede que um código seja importado (com #include) mais de uma vez, gerando erros. Por exemplo, se você incluir o mysql.h em mais de um lugar, pode dar conflito. Com ifndef, ele verifica se já foi includo. Se sim, não inclui novamente. Dessa forma, inclua mysql.h em todo o código que usa ele sem medo, pois o próprio compilador cuida desse controle para você.
Espero ter ajudado e, caso essa solução não funcione, poste os resultados aqui que faço questão de ajudar-lhe.
PS: Não estou criticando seu conhecimento em programação, apenas lhe dando dicas de como deixar seu código mais padrão.