作用域错误,函数没有声明
scope errors functions not declared
嗨,我的问题是以下我想编译我的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(" -----------------------------------------------------------------------------nn->");
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("nnPassword 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 - %dn",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: %dn",auxi->s.id);
printf("| Carta:t%sn",auxi->s.descricao);
printf("| Tipo Carta: %d (%s)n",auxi->s.tipo_sorte,group);
printf("| Consequencia: %dn",auxi->s.consequencia);
printf(" -----------------------------------------------------------------------------nn");
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:UsersJDDesktopProgmain.c In function 'int main()':
42 41 C:UsersJDDesktopProgmain.c [Error] 'validaLogin' was not declared in this scope
44 38 C:UsersJDDesktopProgmain.c [Error] 'menuAdmin' was not declared in this scope
49 35 C:UsersJDDesktopProgmain.c [Error] 'menuAdmin1' was not declared in this scope
28 C:UsersJDDesktopProgMakefile.win recipe for target 'main.o' failed
这些功能是在管理文件,我不明白为什么这个错误,请帮助我
.h文件应该只有函数的前向声明和类型声明,.cpp文件应该只有函数体。当你在。cpp文件中使用一个函数时,你必须添加包含该函数的。h文件。
您需要在调用函数之前声明函数,通过添加函数的所谓原型。
例如,在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
}
当然你还需要添加其他的功能
相关文章:
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 在c++中在类外声明函数有什么好处
- 使用 #define 声明函数
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 如何强制编译器在 C/C++ 本身中声明函数?
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 尝试声明函数的局部变量,但得到范围错误
- 如何在C++模板中声明函数
- 如何在另一个文件的类中声明函数
- 使用非类型模板参数正向声明函数模板
- 在此范围错误中未声明函数错误
- 当我们不能声明函数内联(GCC 编译器)时?
- 未在此作用域中声明函数,即使存在头文件也是如此
- 无法声明函数中的模板类型别名
- 单个CPP文件中多次声明函数声明可以吗?
- 编译一个支持VBA中声明函数的dll
- 使用从外部参数包中获取的参数类型声明函数
- 使用类成员正确地声明函数
- 在函数内重新声明函数