在一个头文件中定义struct并在另一个头文件中使用时发生struct错误

在一个头文件中定义struct并在另一个头文件中使用时发生struct错误,c,C,我有4个文件=pic.h、main.c、framehandle.c和framehandle.h pic.h和framehandle.h都包含在我的主目录中: #include "pic.h" #include "framehandling.h" pic.h具有以下结构定义 struct f { unsigned sleep : 1; unsigned push : 1; unsigned rx : 1; unsigned tx : 1; u

我有4个文件=pic.h、main.c、framehandle.c和framehandle.h

pic.h和framehandle.h都包含在我的主目录中:

#include "pic.h"
#include "framehandling.h"
pic.h具有以下结构定义

struct f
{
    unsigned sleep : 1;
    unsigned push  : 1;
    unsigned rx    : 1;
    unsigned tx    : 1;
    unsigned validPacket : 1;
};
我在main.c文件中使用

struct f flag; 
当我尝试在framehandle.c内部使用这个时,我得到了一个我理解的未声明的错误

为了解决这个问题,我在framehandle.h中添加了以下内容:

extern struct f flag;
但是编译器仍然抱怨framehandle.c中没有声明标志

我做错了什么? 不会外接结构f标志;应该告诉编译器去别的地方寻找去宽容? 把这个放在主题标题中不是正确的位置吗

--编辑--

我正在添加include文件和变量declaration的序列

#include "pic.h"
#include "framehandling.h"

struct f flag;

void main(void)
{ }

它将取决于您是否声明了
struct f标志在main.c中作为全局或本地。如果在函数内部声明,则必须将声明移到函数外部。

问题的解决方案是,extern struct f flag应该位于pic.h内部。在某种程度上,把它放在去宽容之后是有道理的。。我还要感谢大家的投入。

framehandle.c是否包括pic.h?确切的编译器错误是什么?framehandle.c包含pic.h。确切的编译器错误是#framehandle.c:97:error:“flag”未声明(首次在此函数中使用)可能是一个愚蠢的问题,但是
framehandle.c
包括
framehandle.h
?@BryanOlivier是的br然后尝试查看预处理器输出(选项
-E
用于
gcc
)查看它是否确实包含
extern struct f标志
声明。您的
main.c
提到
framehandle.h
,而文本的其余部分提到
framehandle.h
。Struct f标志声明为global@Volcano它是在使用它的位置之前声明的还是之后声明的?我刚刚意识到您正在头文件中添加外部定义。你能把外部代码移到你的C源代码中并检查错误吗?另外,您使用哪种编译器?如果是gcc,您可以使用-E选项检查预处理器如何包含定义?我不确定,我将编辑我的问题,以包括我的#includes和变量decelleration。@unxnut将其放在C文件中会产生一个无用的变量decelleration错误