所以我有一个源mainClass.c,我有主要的定义。我有一个头文件class1.h和class1.c中class1.h中定义的所有函数的实现。我在class1.h中有两个变量(全局),名为cond和mutex,现在正在class1.c中使用,可能在将来我也将在mainClass.c中使用它。 现在要编译所有源文件以生成一个目标文件,我正在做如下的事情:
gcc -Wall -pthread -I/home/2008/ariarad/mainClass1 mainClass1.c class1.c -o out
/ home / 2008 / ariarad / mainClass1是我所有的头文件和源文件所在的位置,我在其中一个.c文件中使用pthead.h。虽然我把它包含在那里它抱怨所以我不得不包括它。
现在,当我运行上述命令时,我收到以下错误:
class1.c:3:16: error: redefinition of ‘cond’
class1.h:66:16: note: previous definition of ‘cond’ was here
class1.c:4:17: error: redefinition of ‘mutex’
class1.h:67:17: note: previous definition of ‘mutex’ was here
以防我在class1.h周围有一个ifndef和endif块以避免多次包含。我绝对不会重新定义.c文件中头文件中定义的变量。那么有人可以帮助我,为什么它仍然给我错误?
答案 0 :(得分:7)
您无法在头文件中定义全局变量。您必须在其中一个.c文件中定义它们,然后在头文件中使用extern
:
在其中一个.c文件中:
int cond;
在其中一个.h文件中,必须包含所有需要变量的.c文件:
extern int cond;