所以,我有这样的事情:
main.c,enemy.c,player.c,technique.c,dialog.c
和他们的标题:
main.h,enemy.h,player.h,technique.h,dialog.h
一切正常,我使用了所有这些,除了来自enemy.c(这个文件没有任何功能)。 我决定启动敌人攻击的代码。
void eAttack(player *p, enemy *e)
{
code;
}
但我收到的错误是这样的:
In file included from main.c:1:
In file included from ./include/main.h:8:
In file included from ./include/player.h:8
./include/enemy.h:18:14: error: unknown type name 'player'
void eAttack(player *p, enemy *e);
事情是,我在player.c,pAttack(玩家* p,敌人* e)具有相同的功能;
它一直很好,直到我开始编码enemy.c
我读到了它,我认为这个问题是前瞻性声明和“后卫”。因为如果我删除#include" player.h"来自敌人,它对于player.c也是如此,如果我擦掉它们仍然不起作用。
我只发现了c ++的答案,但仍然不知道如何使用C来解决这个问题。
答案 0 :(得分:0)
因此player
必须知道enemy.c
类型,而enemy
类型必须知道player.c
吗?
您必须在这些类型声明后包含您的标题,以避免unknown type
s:
/ * main.c * /
#include "player.h"
#include "enemy.h"
int main(void)
{
player p = {1};
enemy e = {2};
pAttack(&p, &e);
eAttack(&p, &e);
return 0;
}
/ * player.h * /
#ifndef PLAYER_H
#define PLAYER_H
typedef struct {
int bla;
} player;
#include "enemy.h"
void pAttack(player *p, enemy *e);
#endif
/ * enemy.h * /
#ifndef ENEMY_H
#define ENEMY_H
typedef struct {
int bla;
} enemy;
#include "player.h"
void eAttack(player *p, enemy *e);
#endif
/ * player.c * /
#include <stdio.h>
#include "player.h"
void pAttack(player *p, enemy *e)
{
printf("%d %d\n", p->bla, e->bla);
}
/ * enemy.c * /
#include <stdio.h>
#include "enemy.h"
void eAttack(player *p, enemy *e)
{
printf("%d %d\n", p->bla, e->bla);
}