您好我的问题是以下我想编译我的c项目并且它没有工作说我的一些我的功能没有在范围内声明,但他们是,我不明白为什么它不编译
我的代码:
标题文件:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <time.h>
typedef struct s {
int id;
int tipo_sorte;
char descricao[100];
int consequencia;
} S;
typedef struct sorte{
S s;
struct sorte *anterior;
struct sorte *proximo;
}SORTE;
typedef struct t {
int id;
int n_casa;
} T;
typedef struct tabuleiro{
T t;
struct tabuleiro *anterior;
struct tabuleiro *proximo;
}TABULEIRO;
typedef struct j {
int id;
char nome[50];
char sigla[5];
int jogadas;
} J;
typedef struct jogador{
J j;
struct jogador *anterior;
struct jogador *proximo;
}JOGADOR;
主文件:
#include "lista.h"
int main()
{
int opcao=0, a = 0;
SORTE *inicio = NULL;
JOGADOR *ini = NULL;
TABULEIRO *tini = NULL;
SORTE *fim = NULL;
TABULEIRO *tfim = NULL;
JOGADOR *end = NULL;
printf(" ----------------------------------------------------------------------------\n"
"| Monopolio 2014. |\n"
"| Bem-Vindo. |\n"
" ----------------------------------------------------------------------------\n");
//carregaPerguntas(&inicio, &fim);
//carregaJogadores(&ini, &end);
// system("PAUSE");
do{
system("cls");
printf(" -----------------------------------------------------------------------------\n");
printf("| 1 - Jogar |\n");
printf("| 2 - Administrador |\n");
printf("| 3 - Recordes TOP 10 |\n");
printf("| 4 - Sair |\n");
printf(" -----------------------------------------------------------------------------\n\n->");
fflush(stdin);
scanf("%d",&opcao);
switch(opcao) {
case 1 : system("cls");
// jogar(inicio,fim, &ini, &end);
break;
case 2 : system("cls");
a = validaLogin();
if(a==0){
menuAdmin();
}
if(a==1){
menuAdmin1(&inicio, &fim);
}else{
//menuAdmin2(&inicio, &fim);
}
break;
case 3 : system("cls");
// carregaRecordes(&ini, &end);
// listaRecordes(ini);
break;
case 4 : system("cls");
printf(" -----------------------------------------------------------------------------\n");
printf("| Obrigado por ter jogado. |\n");
printf(" -----------------------------------------------------------------------------\n");
system("PAUSE");
default : if(opcao<1 || opcao>4) {
system("cls");
printf("Opcao Invalida.\n");
system("PAUSE");
}
break;
}
}while(opcao!=4);
// gravaRecordes(ini);
system("cls");
return 0;
}
管理员档案:
#include "lista.h"
int validaLogin(){
system("cls");
char pass[20]="", passwd[20]="";
int n_tenta = 3;
FILE *fp = fopen("pass.dat","r+b");
if(fp==NULL){
printf("Primeiro Acesso. Por favor defina a password.\n");
fflush(stdin);
gets(pass);
fclose(fp);
fp=fopen("pass.dat","wb");
fwrite(pass,sizeof(pass),1,fp);
printf("\n\nPassword definida com sucesso.\n");
system("PAUSE");
fclose(fp);
return 0;
}
do{
fflush(stdin);
fread(passwd,sizeof(passwd),1,fp);
printf("Introduza a password de acesso ao modo de administracao.\n");
fflush(stdin);
gets(pass);
if(strcmp(pass,passwd)!=0){
system("cls");
n_tenta--;
printf("Password invalida. Restam %d tentativas.\n",n_tenta);
if(n_tenta==0){
printf("A sair do modo de administracao.\n");
system("PAUSE");
return -1;
}
}
else{
printf("Password inserida com sucesso.\n");
system("pause");
}
}while(strcmp(pass,passwd)!=0);
fclose(fp);
return 0;
}
void inserePergunta(SORTE **inicio, SORTE **fim){
SORTE *novo = (SORTE*) malloc(sizeof(SORTE);
int gr=0, a=0;
if(novo==NULL){
system("cls");
printf("Erro na reserva de memoria.\n");
system("pause");
return;
}
printf(" -----------------------------------------------------------------------------\n");
printf("| Insira o tipo de consequencia da carta da sorta |\n");
printf(" -----------------------------------------------------------------------------\n");
printf("| 1 - Recuar |\n");
printf("| 2 - Avancar |\n");
printf("| 3 - Saltar |\n");
printf(" -----------------------------------------------------------------------------\n->");
do{
fflush(stdin);
scanf("%d",&gr);
if(gr<1 || gr>3){
printf("Opcao errada.\nInsira novamente.\n->");
}
}while(gr<1 || gr>3);
novo->s.tipo_sorte = gr;
system("cls");
printf("Insira o tipo da consequencia.\n->");
fflush(stdin);
gets(novo->s.descricao);
if(gr==1 || gr==2 || gr==3){
printf("Insira o numero de casas.\n->");
fflush(stdin);
scanf("%d",&novo->s.consequencia);
}
if(*inicio==NULL){
novo->s.id=1;
}
else{
novo->s.id = (*fim)->s.id + 1;
}
inserirListaP(novo->s, &(*inicio), &(*fim));
printf("ID da casa - %d\n",novo->s.id);
system("pause");
}
int listaPerguntas(SORTE *inicio){
SORTE *auxi = inicio;
char group[50]="";
if(auxi==NULL){
return -1;
}
while(auxi!=NULL){
if(auxi->s.tipo_sorte==1){
strcpy(group,"Recuar");
}
if(auxi->s.tipo_sorte==2){
strcpy(group,"Avancar");
}
if(auxi->s.tipo_sorte==3){
strcpy(group,"Saltar");
}
printf(" -----------------------------------------------------------------------------\n");
printf("| ID: %d\n",auxi->s.id);
printf("| Carta:\t%s\n",auxi->s.descricao);
printf("| Tipo Carta: %d (%s)\n",auxi->s.tipo_sorte,group);
printf("| Consequencia: %d\n",auxi->s.consequencia);
printf(" -----------------------------------------------------------------------------\n\n");
auxi = auxi->proximo;
}
return 1;
}
void editaPergunta(SORTE *inicio){
system("cls");
SORTE *aux = inicio;
int auxi=0, l=0, a=0;
l = listaPerguntas(inicio);
if(l==-1){
printf(" -----------------------------------------------------------------------------\n");
printf("| Nao existem cartas inseridas para poder alterar.\n");
printf(" -----------------------------------------------------------------------------\n");
system("pause");
return;
}
printf(" -----------------------------------------------------------------------------\n");
printf("| Insira o id da carta a alterar.\n");
printf(" -----------------------------------------------------------------------------\n->");
fflush(stdin);
scanf("%d",&auxi);
while(aux!=NULL){
if(aux->s.id == auxi) {
printf("Edite a carta.\n->");
fflush(stdin);
gets(aux->s.descricao);
printf("Introduza nova consequencia.\n->");
fflush(stdin);
scanf("%d",&aux->s.consequencia);
}
printf(" -----------------------------------------------------------------------------\n");
printf("| Dados editados com sucesso.\n");
printf(" -----------------------------------------------------------------------------\n");
system("pause");
return;
}
else {
aux = aux->proximo;
}
}
printf(" -----------------------------------------------------------------------------\n");
printf("| A carta com o id '%d' nao existe.\n",auxi);
printf(" -----------------------------------------------------------------------------\n");
system("pause");
}
void eliminaPergunta(SORTE **inicio, SORTE **fim){
SORTE *aux = *inicio;
int l=0, i=0;
l = listaPerguntas(*inicio);
if(l==-1){
printf(" -----------------------------------------------------------------------------\n");
printf("| Nao existem cartas inseridas para poder eliminar.\n");
printf(" -----------------------------------------------------------------------------\n");
system("pause");
return;
}
printf(" -----------------------------------------------------------------------------\n");
printf("| Insira o id da carta a eliminar.\n->");
printf(" -----------------------------------------------------------------------------\n");
fflush(stdin);
scanf("%d",&i);
while(aux!=NULL && aux->s.id != i) {
aux = aux->proximo;
}
if(aux==NULL){
printf(" -----------------------------------------------------------------------------\n");
printf("| A carta com o id '%d' nao existe.\n",i);
printf(" -----------------------------------------------------------------------------\n");
system("pause");
return;
}
if(aux->anterior==NULL) {
*inicio = aux->proximo;
if(*inicio) (*inicio)->anterior = NULL;
}
else
aux->anterior->proximo = aux->proximo;
if(aux->proximo==NULL) {
*fim = aux->anterior;
if(*fim) (*fim)->proximo=NULL;
}
else
aux->proximo->anterior = aux->anterior;
free(aux);
printf(" -----------------------------------------------------------------------------\n");
printf("| Carta removida.\n");
printf(" -----------------------------------------------------------------------------\n");
system("pause");
}
void menuAdmin(){
system("cls");
system("cls");
printf(" -----------------------------------------------------------------------------\n");
printf("| Menu Administracao. |\n");
printf(" -----------------------------------------------------------------------------\n");
printf("| 1 - Gerir Cartas da sorte |\n");
printf("| 2 - Gerir Tabuleiro |\n");
printf("| 0 - Menu anterior |\n");
printf(" -----------------------------------------------------------------------------\n->");
}
void menuAdmin1(SORTE **inicio, SORTE **fim){
system("cls");
int op=0;
do{
system("cls");
printf(" -----------------------------------------------------------------------------\n");
printf("| Menu Administracao. |\n");
printf(" -----------------------------------------------------------------------------\n");
printf("| 1 - Inserir Pergunta |\n");
printf("| 2 - Editar Pergunta |\n");
printf("| 3 - Eliminar pergunta |\n");
printf("| 0 - Menu anterior |\n");
printf(" -----------------------------------------------------------------------------\n->");
fflush(stdin);
scanf("%d",&op);
switch(op){
case 1: system("cls");
inserePergunta(&(*inicio), &(*fim));
break;
case 2: system("cls");
editaPergunta(*inicio);
break;
case 3: system("cls");
eliminaPergunta(&(*inicio), &(*fim));
break;
default:if(op<0 || op>3){
printf("Opcao errada.\n");
system("PAUSE");
}
gravaPerguntas(*inicio);
system("PAUSE");
break;
}
}while(op!=0);
}
错误日志:
C:\Users\JD\Desktop\Prog\main.c In function 'int main()':
42 41 C:\Users\JD\Desktop\Prog\main.c [Error] 'validaLogin' was not declared in this scope
44 38 C:\Users\JD\Desktop\Prog\main.c [Error] 'menuAdmin' was not declared in this scope
49 35 C:\Users\JD\Desktop\Prog\main.c [Error] 'menuAdmin1' was not declared in this scope
28 C:\Users\JD\Desktop\Prog\Makefile.win recipe for target 'main.o' failed
这些功能在管理员文件上我不明白为什么这个错误请帮助我
答案 0 :(得分:0)
在调用函数之前,您需要声明函数,方法是添加函数的所谓原型。
例如,在main.cpp
文件中,在main
功能之前,添加例如以下一行
int validaLogin();
这是一个函数声明,它告诉编译器存在一个名为validaLogin
的函数,它不带参数,并返回int
。
为了更清楚,您的main.cpp
文件应该看起来像
#include "lista.h"
// Declare function prototypes of the functions I use,
// but are defined in another file
int validaLogin();
int main()
{
// All your code here
}
您当然也需要添加其他功能。
答案 1 :(得分:0)
你的.h文件应该只有函数和类型声明的前向声明,你的.cpp文件应该只有函数体。 在.cpp文件中使用函数时,必须添加包含该函数的文件.h的包含。