在一个头文件中定义struct并在另一个头文件中使用时发生struct错误
我有4个文件=pic.h、main.c、framehandle.c和framehandle.h pic.h和framehandle.h都包含在我的主目录中:在一个头文件中定义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
#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错误