0
我对C相当陌生,并且遇到了我的头文件结构问题。看来,当我包括keyboard.h
从ps2.h
,因为keyboard.h
最初包括ps2.h
第一,ps2.h
不能访问keyboard.h
的定义。遇到问题
keyboard.h
#ifndef KEYBOARD
#define KEYBOARD
#include "ps2.h"
typedef enum {
KEY_UNDEFINED,
// letters
A,
B,
... many more keys
} Key;
typedef enum {
TYPE_UNDEFINED, PRESSED, RELEASED
} KeyEventType;
typedef struct {
Key key;
KeyEventType type;
} KeyEvent;
#define NULL {KEY_UNDEFINED, TYPE_UNDEFINED}
... function declarations, implemented in a keyboard.c file next to keyboard.h
#endif
ps2.h
#ifndef PS2
#define PS2
#include <stdbool.h>
#include "keyboard.h"
#define keycount 17
KeyEvent scanCodeSet1[] = { NULL, { ESCAPE, PRESSED },
{ DIGIT1, PRESSED }, { DIGIT2, PRESSED },
... many more codes
};
我包括keyboard.h
在我的主文件。
就像我上面所说的那样,从ps2.h
访问的所有定义(例如RELEASED
)都不起作用。
的许多错误消息符合这一模式:
'PRESSED' undeclared here (not in a function)
我用GCC是否有帮助。
你在这里有一个循环依赖。为什么你需要两个头包含对方? – user3528438
因为'ps2.h'在'keyboard.h'中调用函数,反之亦然。 –
不,标题中的代码通常不会调用函数,它们应该只是声明。 – user3528438