错误:在C中的’*’标记之前预期’=’,’,’,’;’,’asm’或’__attribute__’
我有以下声明
FILE *fptr; FILE *optr;
在algo.h中,我在main.c中使用main来打开这些文件。 如果我将声明放在头文件中,我会收到上述错误。 如果我把它放在main.c中,那么我会得到多个定义错误
src\main.o:main.c:(.bss+0xc88): multiple definition of
rcount' src\new_algo.o:new_algo.c:(.bss+0xc88): first defined here src\main.o:main.c:(.bss+0xc8c): multiple definition of
condi' src\new_algo.o:new_algo.c:(.bss+0xc8c): first defined here
有点听起来像你(1)没有包含
你正在使用FILE
,和/或(2)在你的标题中有一些非static
可执行代码或非extern
变量定义(和/或是#include
一个C文件)。
第一个通常会导致不定义FILE
(或者在某些情况下将typedef
定义为不存在的类型)。 第二个会导致在包含文件的每个翻译单元中定义填充内容,这会使链接器混淆。
修复:(1)在使用FILE
的文件中#include
,以及(2)将标题中的共享定义移动到.c文件中(和/或将它们声明为static
或extern
),并且只有#include
.h文件。
你在algo.h中所拥有的是一个定义而不是一个声明。 如果你有FILE * fptr; FILE * optr; 在源文件和头文件中,您将两次声明变量。
你需要:
algo.h
extern FILE *fptr; extern FILE *optr;
algo.c
FILE *fptr; FILE *optr;
听起来你不包括stdio。 加
#include
在你的头文件上面的那些声明。
链接器错误与您发布的FILE
变量无关。
您的源有两个变量,名为rcount
和rcount
,根据链接器在两个源文件中定义。 我猜,原因是你在两个源文件中包含的头文件中定义了这些变量。 一些旧的编译器仍然无法处理。