C 头文件中的Typedef对包含它的另一个文件不可见

C 头文件中的Typedef对包含它的另一个文件不可见,c,struct,include,typedef,ifndef,C,Struct,Include,Typedef,Ifndef,我在C中遇到以下问题: 我为headerfile(“mep.h”)中的结构声明一个typedef \ifndef MEP\H #定义MEP_H 类型定义结构Mep_标签Mep; #恩迪夫 我使用另一个headerfile(“mep_types.h”),其中包括“mep.h”,定义结构“mep_标记”,并使用“mep”类型名称: #ifndef MEP_TYPES_H #define MEP_TYPES_H #include "mep.h" #include "file1.h" struct

我在C中遇到以下问题: 我为headerfile(“mep.h”)中的结构声明一个typedef

\ifndef MEP\H
#定义MEP_H
类型定义结构Mep_标签Mep;
#恩迪夫
我使用另一个headerfile(“mep_types.h”),其中包括“mep.h”,定义结构“mep_标记”,并使用“mep”类型名称:

#ifndef MEP_TYPES_H
#define MEP_TYPES_H

#include "mep.h"
#include "file1.h"

struct Mep_MsgElement_tag
{
    const Mep * MsgCh;                   
};

struct Mep_tag
{
    <stuff in here>
};

#endif
\ifndef MEP\u类型
#定义MEP_类型
#包括“mep.h”
#包括“file1.h”
结构Mep\u MsgElement\u标签
{
常量Mep*MsgCh;
};
结构Mep_标签
{
};
#恩迪夫
由于某种原因,在编译时,我会出现以下错误: mep_类型。h:错误:未知类型名称“'mep'”

但是,如果在“mep.h”中,我将typedef放在ifndef防护装置外,如下所示

typedef struct Mep_tag Mep;

#ifndef MEP_H
#define MEP_H

<other stuff declared here>

#endif
typedef结构Mep\u标签Mep;
#ifndef MEP\U H
#定义MEP_H
#恩迪夫
…在“mem_types.h”中可以看到“Mep”类型名称


有人知道这是怎么发生的吗?

看起来“MEP_H”已经在另一个头文件中定义了。尝试暂时将其更改为“TEMP_MEP_H”,看看是否有什么变化。那么,是否有可能其他一些文件会包括“MEP.H”,定义“MEP_H”,以便在编译“MEP_types.H”时使用“MEP.H”“不包括文件的内容?更准确地说,一些文件明确定义了
MEP\u H
,但不包括“MEP.H”。是的,我已经证实了这种情况,一个文件定义了“MEP\u H”。删除此语句就可以做到这一点。非常感谢大家抽出时间来帮助我。
typedef struct Mep_tag Mep;

#ifndef MEP_H
#define MEP_H

<other stuff declared here>

#endif