【问题标题】:C - Headers including each otherC - 包含彼此的标题
【发布时间】:2016-01-12 14:23:55
【问题描述】:

我有一个文件game.h 有这个声明

typedef struct Enemy {
  ...
}Enemy;

还有一个函数

void moveEnemy(Level* l, Enemy* enemy){
  ...
}

Levellevels.h 上声明,所以在game.h 我有:

#include "levels.h"

一切都很完美,直到我不得不在levels.h 中使用Enemy

所以,我在levels.h 中添加了:

#include "game.h"

现在我得到一个编译错误:

game.h:34:2: error: unknown type name ‘Level’
  Level* level;
  ^

我在两个 .h 上都包含警卫

我不知道为什么我不能在文件中包含另一个。

我能做什么?

【问题讨论】:

  • 这个问题我没看懂,moveEnemy()是在头文件中定义的吗?如果是,它不应该!
  • 是的。我会把它放在一个 .c 中,看看它是否有效
  • 不,看答案。但是 YES 从不将函数放在头文件中。头文件意味着不包括函数原型、常量和声明、结构定义或用户定义的数据类型等。不是函数定义,它们属于 .c 文件。

标签: c gcc


【解决方案1】:

只需在game.h函数之前添加一个前向声明,就像这样,

typedef struct Level Level;

因为它只是一个指向 Level 的指针,所以它可以做到。

【讨论】:

  • 它解决了这个问题,但又产生了另一个问题。现在,当我使用结构级别时,如在“lev->map”中,我收到错误:取消引用指向不完整类型的指针。我之前没有收到此错误
  • 将函数移动到 .c 文件中,然后在其中包含 level.h
  • 一个问题。包含应该在 .c、.h 或两者上?
  • 根据您的设置,可能两者都有。
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
相关资源
最近更新 更多