我在两个不同的头文件中有两个结构,让我们说:
header1.h:

#ifndef HEADER1_H
#define HEADER1_H

#include "header2.h"

typedef struct
{
  Struct2 s;
} Struct1;
#endif


header2.h:

#ifndef HEADER2_H
#define HEADER2_H

#include "header1.h"

typedef struct
{
  Struct1* s;
} Struct2;

#endif


如您所见,我在Struct1中声明了Struct2,并在Struct2中声明了指向Struct1的指针。显然,当我尝试编译它时,出现一个错误:未知类型名称“ Struct1”或“ Struct2”。有没有办法做到这一点,或者我必须改变观念?

最佳答案

如果您确实想这样做,则只需在真正声明每个结构之前使用部分声明即可:

头文件1.h

#ifndef _HEADER1_H
#define _HEADER1_H

#include "header2.h"

struct struct1
{
      struct struct2 s2;
};
#endif


标头2.h

#ifndef _HEADER2_H
#define _HEADER2_H

struct struct1;

struct struct2
{
      struct struct1 *s1;
};

#endif

09-26 00:09