在’*’标记之前编译“错误:预期’)’时出现多个相同错误

我想用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 

如果您需要更多信息,请告诉我们,谢谢!

您的头文件以循环方式相互包含。 这是你的错误的原因。

切勿尝试循环包含。 它什么都不做,只能导致错误。 将标题重新设计为“分层”层次结构:较高级别的标题包含较低级别的标题,但不是相反。

在您的情况下,循环包含可以通过以下两种方式之一消除:

  1. 停止将WordList.h包含到FileOccur.h 。 而是提供前瞻声明

     typedef struct word word; 

    FileOccur.h

  2. 停止将FileOccur.h包含到WordList.h 。 而是提供前瞻声明

     typedef struct FileOccur FileOccur; 

    WordList.h

哪种方法更好取决于您认为哪个头文件是更高级别的头文件。

另请参阅此处避免头文件的循环依赖性