不完全なタイプは使用できません。ポインタを渡すことしかできません。これは、型が完成するまで、コンパイラーはそれがどれだけ大きいかを知らないためです。OTOHポインターは、ポイントしているタイプに関係なく、データポインターのサイズです。不完全な型で実行できないことの1つは、その型の変数を宣言することです。
extern
変数宣言では、コンパイラーは、ストレージを割り当てる代わりに、別のコンパイル単位(リンカーによって解決される)で提供される識別子への参照を発行することを意味します。 extern
C ++文法で型名の横に表示されている場合でも、型は変更されません。
あなたができることは、列挙型メンバーが整数定数値であるという事実を利用して、プリミティブな整数型にうまく変換することです。
だからあなたはこれを行うことができます:
A.cpp
enum MYENUM { ONE=1, TWO, THREE };
int var = TWO;
B.cpp
extern int var;
ただし、タイプは一致する必要があります。あなたは言うことができませんでしたMYENUM var = TWO;
そしてまたextern int var;
。これは、単一定義規則に違反します(違反は、リンカーによって検出される場合とされない場合があります)。
余談ですが、これは正しくありません。
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
enum MYENUM TWO;
MYENUM
列挙型識別子ではありません。enum
これはtypedefであり、後でキーワードで修飾することはできません。