2

C で次の問題が発生しています。ヘッダーファイル ("mep.h") で構造体の typedef を宣言しています。

#ifndef MEP_H
#define MEP_H

typedef struct Mep_tag Mep;
<other stuff declared here>

#endif

「mep.h」を含む別のヘッダーファイル (「mep_types.h」) を使用し、構造体「Mep_tag」を定義し、「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

これをコンパイルすると、何らかの理由で次のエラーが発生します: "mep_types.h: error: unknown type name "'Mep'".

ただし、「mep.h」で、このように ifndef ガードの外に typedef を配置すると...

typedef struct Mep_tag Mep;

#ifndef MEP_H
#define MEP_H

<other stuff declared here>

#endif

... 「mem_types.h」に「Mep」型名が表示されます。

誰かがこれがどのように起こるか知っているでしょうか?

4

0 に答える 0