不完全なタイプは使用できません。ポインタを渡すことしかできません。これは、型が完了するまで、コンパイラはその大きさを知らないからです。 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;
とは言えませんでした。これは、1つの定義ルール(違反がリンカによって検出されるかどうかに関係なく)に違反します。余談として
、これは正しくありません。
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
enum MYENUM TWO;
MYENUM
は、列挙型識別子ではありません。これはtypedefであり、後でenum
キーワードで修飾することはできません。
列挙型メンバを使用するには、コンパイル単位から見える必要があります。つまり、ヘッダファイルをインクルードする必要があります。 –
彼はメンバー、AFAICSを使用しようとしていません。 –