在’*’标记之前编译“错误:预期’)’时出现多个相同错误
我想用C编程。
当我使用以下参数编译时….
gcc -D_BSD_SOURCE -Wall -ansi -pedantic -g tokenizer.c FileOccur.c WordList.c wordstat.c indexer.c -o indexer
我从终端得到这个作为回应:
In file included from ../Headers/WordList.h:11, from FileOccur.c:12: ../Headers/FileOccur.h:18: error: expected ')' before '*' token ../Headers/FileOccur.h:20: error: expected ')' before '*' token In file included from ../Headers/WordList.h:11, from WordList.c:11: ../Headers/FileOccur.h:18: error: expected ')' before '*' token ../Headers/FileOccur.h:20: error: expected ')' before '*' token WordList.c: In function 'insert_List': WordList.c:155: warning: implicit declaration of function 'insert_FileOccur' In file included from ../Headers/WordList.h:11, from wordstat.c:11: ../Headers/FileOccur.h:18: error: expected ')' before '*' token ../Headers/FileOccur.h:20: error: expected ')' before '*' token In file included from ../Headers/WordList.h:11, from indexer.c:11: ../Headers/FileOccur.h:18: error: expected ')' before '*' token ../Headers/FileOccur.h:20: error: expected ')' before '*' token
这是我的FileOccur.h文件:
/* * FileOccur.h * Includes list of all functions declared in FileOccur.c so that other source files * can use them. Also defines the fields for the structs used for FileOccur.c */ #ifndef FILEOCCUR_H #define FILEOCCUR_H #include "../Headers/WordList.h" #include #include typedef struct FileOccur FileOccur; FileOccur * create_FileOccur(char * fileName); void fprint_FileOccur(FILE * indexFile, FileOccur * currFileOccur); void free_Occur(FileOccur * curr); int insert_FileOccur(word * lCurr,char * fileName); void print_FileOccur(FileOccur * currFileOccur); int sort_TotalOccur(word * lCurr, FileOccur * prevFile, FileOccur * currFile); struct FileOccur{ /* * the FileOccur struct is used as a node to keep information about how many times an * an item was found in a file, the file's name and the next file that has the same * item in it, in this case a word * */ char * fileName; int occur; FileOccur * next; }; #endif
这是我的WordList.h文件:
/* * WordList.h * Includes list of all functions declared in WordList.c so that other source files * can use them. Also defines the fields for the structs used for WordList.c */ #ifndef WORDLIST_H #define WORDLIST_H #include #include #include "FileOccur.h" typedef struct word word; typedef struct wordList list; word * create_Word(char * spell, char * fileName); void fprint_List(FILE * indexFile, list * words); void free_List(list * words); int insert_List(char * currString, list * words, char * fileName); void print_List(list * words); struct word{ /* the word struct used as a node to keep important information about each word including * its occurences in the various files, the next word in the list, and the spelling of the * current word. */ char * spell; struct word * next; FileOccur * totalOccur; }; struct wordList{ /* my linked list that simply has a pointer to the first node*/ word * start; }; #endif
如果您需要更多信息,请告诉我们,谢谢!
您的头文件以循环方式相互包含。 这是你的错误的原因。
切勿尝试循环包含。 它什么都不做,只能导致错误。 将标题重新设计为“分层”层次结构:较高级别的标题包含较低级别的标题,但不是相反。
在您的情况下,循环包含可以通过以下两种方式之一消除:
-
停止将
WordList.h
包含到FileOccur.h
。 而是提供前瞻声明typedef struct word word;
在
FileOccur.h
。 -
停止将
FileOccur.h
包含到WordList.h
。 而是提供前瞻声明typedef struct FileOccur FileOccur;
在
WordList.h
。
哪种方法更好取决于您认为哪个头文件是更高级别的头文件。
另请参阅此处避免头文件的循环依赖性