私はいくつかの古いコードをリファクタリングして持ち込もうとしていますが、次のようなものに出くわしました:
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 タグ」 (struct
キーワードの後の適切な参照のみ) であるため、どのようにして新しいfoo
typedef された型と競合するのでしょうか?
編集 1:これが実際のファイル全体です。何か不足している可能性がありますが、かなり単純なようです。上記と同じエラーを、タイプごとに 1 つずつダンプします。
# 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()
マクロは無視してください。この場合はノープです。)