ISBN.h
int isValid(const char str[]);
int isRegistered(FILE* fp, const char str[], char area[], char publisher[], char title[]);
错误:
ISBN.h:2:18: error: FILE was not declared in this scope
ISBN.h:2:24: error: fp was not declared in this scope
ISBN.h:2:28: error: expected primary-expression before const
ISBN.h:2:46: error: expected primary-expression before char
ISBN.h:2:59: error: expected primary-expression before char
ISBN.h:2:77: error: expected primary-expression before char
ISBN.h:2:89: error: expression list treated as compound expression in initializer [-fpermissive]
我不确定我是否理解错误,因为我有另一个头文件,其中包含相同类型的参数,不会产生任何错误:
ISBNPrefix.h
FILE* open(const char filename[]);
int isRegistered(FILE* fp, int area);
int minNoDigits(FILE* fp, int area);
int isRegistered(FILE* fp, int area, const char publisher[]);
int close(FILE* fp);
isRegistered
定义了三次,但是参数数量不同,所以当你在main
中使用带有X个参数的函数时,它是否只使用带有所述参数的相应版本? 我收到与我的ISBN.cpp
相对应的第二组错误,其中包含我的ISBN.h
:
ISBN.cpp:在函数int isRegistered(FILE *,const char *,char *,char *,char *)中: ISBN.cpp:36:89:错误:int isRegistered(FILE *,const char *,char *,char *,char *)重新声明为不同类型的符号 ISBN.h:2:5:错误:以前的int声明是注册
ISBN.cpp
#include "ISBN.h"
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;
int isValid(const char str[])
{
}
int isRegistered(FILE* fp, const char str[], char area[], char publisher[], char title[])
{
}
答案 0 :(得分:2)
FILE
是<cstdio>
标题的一部分,在您开始在标题中使用它之前,它不会包含在内。这就像#include <iostream>
使用std::cout
的方式一样。您通常应该在每个文件的基础上包含所需的每个标头,而不是依赖其他文件来包含它们。
另一件需要注意的事情是,您通常应该先处理第一个列出的错误。一个错误可能会导致无意义错误的连锁反应,并最终导致您轻易偏离轨道。