Я пытаюсь реорганизовать и перенести какой-то старый код, и я наткнулся на что-то вроде этого:
struct foo;
typedef struct foo * foo;
При попытке его скомпилировать я получаю следующую ошибку:
Source/Types/Types.h:27:18: error: redefinition of 'foo' as different kind of symbol
typedef struct foo * foo;
^
Кто-нибудь знает, что вызывает это?Я давно не касался кода, но я, конечно, не помню никаких ошибок, связанных с этим.Это один из самых основных кодов в кодовой базе, все зависит от него;Я не понимаю, как я мог пропустить такую явную ошибку, если это действительно ошибка.Поскольку исходный foo
является «структурным тегом» (только нормальная ссылка после ключевого слова struct
), как он может конфликтовать с моим новым foo
typedef'd типом?
Редактировать1: Вот весь фактический файл, возможно, я что-то упустил, но это кажется довольно простым.Он сбрасывает slew тех же ошибок, описанных выше, по одной для каждого типа:
# if !defined(TYPE_DECLARATIONS)
# define TYPE_DECLARATIONS
# include "Core.h"
# warning "in Core.h"
static int class = 0; // to prove I’m not compiling as C++
struct e(fork);
typedef struct e(fork)* e(fork);
struct e(execution);
typedef struct e(execution)* e(execution);
struct e(thing);
typedef struct e(thing) e(thing);
struct e(typeRepresentation);
typedef struct e(typeRepresentation)* e(typeRepresentation);
struct e(typeRepresentation) {
void * family;
char name[64]; };
struct e(thing) {
void * const pointer;
e(typeRepresentation) const isa; };
# endif //!defined(TYPE_DECLARATIONS)
(Кроме того, игнорируйте макрос e()
; в данном случае это noop.)