我在尝试将一个头文件中的枚举包含在另一个文件中时,一直遇到问题。我工作的环境是使用IAR embedded Workbench的嵌入式C。
我有一个名为"enums.h"的专用枚举类型的头文件
#ifndef ENUMS_H_
#define ENUMS_H_
typedef enum
{
SET,
SCHEDULE,
EXECUTE
}action_type_t;
#endif
以及名为"parser.h"的解析器的头文件
#ifndef PARSER_H_
#define PARSER_H_
#include "enums.h"
#include <stdint.h>
typedef struct
{
action_type_t action;
uint16_t nbytes;
}Message;
#endif
在parser.c中,我将头作为包含在内
#include "parser.h"
当我编译这个时,我得到错误"identifier action_type_t is undefined">
我在这里做错了什么?在这一点上我被难住了。
谢谢
您的enum
定义缺少逗号,parser.h
使用uint16_t
时未能包含<stdint.h>
,而且更为迂腐的是,您的include-guard宏正在侵占保留的命名空间,因为它以_
和大写字母开头。
这应该有效:
enums.h:
#ifndef ENUMS_H_
#define ENUMS_H_
typedef enum
{
SET,
SCHEDULE,
EXECUTE, /*the last comma is optional*/
}action_type_t;
#endif
解析器.h:
#ifndef PARSER_H_
#define PARSER_H_
#include "enums.h"
#include <stdint.h>
typedef struct
{
action_type_t action;
uint16_t nbytes;
}Message;
#endif
感谢所有回答的人,我想我会回来关闭这个。事实证明,我的项目中包含了一个名称相同但为空的头文件。。。
下次我最好先看看自己的后院,然后再问别人。
然而,PSkocik确实提供了一个工作示例,他的代码非常适合任何偶然进入这个线程的人!