Включение перечисления typedef из заголовочного файла в другой заголовочный файл - PullRequest
1 голос
/ 20 марта 2020

Я продолжаю сталкиваться с проблемой, пытаясь включить перечисление из одного заголовочного файла в другой. Среда, в которой я работаю, встроена C с использованием IAR Embedded Workbench.

У меня есть файл заголовка для выделенных перечисляемых типов с именем "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

В парсере. c Я включаю заголовок как

#include "parser.h"

Когда я компилирую это, я получить ошибку «идентификатор action_type_t не определен»

Что я здесь не так делаю? В этот момент я в тупике.

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

В вашем определении enum отсутствуют запятые, ваш parser.h использует uint16_t, но при этом не удалось включить <stdint.h> и, чтобы быть лишним pedanti c, ваш макрос включенного охранника вторгается в зарезервированное пространство имен, поскольку он начинается с _ и заглавной буквы.

Это должно работать:

enums.h :

#ifndef ENUMS_H_
#define ENUMS_H_

typedef enum
{
    SET,
    SCHEDULE,
    EXECUTE, /*the last comma is optional*/
}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
0 голосов
/ 30 марта 2020

Спасибо всем, кто ответил, я подумал, что вернусь и закрою этот. Оказывается, у меня в проекте был одноименный, но пустой заголовочный файл ...

В следующий раз мне лучше будет сначала заглянуть в свой двор, прежде чем спрашивать других.

Однако PSkocik предоставил работающий пример, и его код отлично компилируется для всех, кто сталкивается с этой темой!

...