隐式声明意味着有一些东西没有在头文件中声明(相反,编译器只是找到了函数)。先前的隐式声明意味着它在假定“原始”函数的隐式声明之后(或者,我猜,正如 Doug 在评论中建议的另一个同名函数)之后遇到声明。
发生这种情况的方式有很多种:
也许您没有在关联文件中包含标题。所以IF.c
不包括IF.h
。编译器将读取IF.c
并创建隐式定义。IF.h
稍后,当它在其他地方读取时,它会给出这个错误。
也许您在不包含相关标题的文件中使用了一个函数。所以也许IF.h
定义了myfunction()
,但你使用myfunction()
indMem.c
并且不包括IF.h
在那里。所以编译器在看到 in when 包含在定义之前看到使用myfunction()
in 。dMem.c
IF.h
IF.c
根本没有头文件,你可以用相互递归的函数来得到它。请参阅如何在 C 中对函数进行排序?“函数的先前隐式声明在这里”错误
正如 Doug 建议的那样,您定义了两个具有相同名称的函数(并且在标题中没有定义)。
基本上,在某个地方,不知何故,编译器在到达带有相关声明的标头之前到达了一个函数。当它确实找到标题时,它意识到事情搞砸了并产生了错误。
(标题错误的一个经典来源是将“ifdefs”从一个文件剪切+粘贴到另一个文件并忘记更改名称......)
[再次阅读您的问题,我假设您只列出了头文件。但现在我看到这就是你拥有的所有文件。为什么你的头文件比源文件多得多?通常每个源文件都与一个或两个包含它定义的函数的声明的头文件相关联(尽管它可能会导入它需要支持的其他函数)。这与您的编译器错误无关,但听起来您可能需要拆分源代码。它还表明要么我误解了你,要么你误解了标题通常是如何使用的。]