C 列挙型を使用するための適切な構文がわかりません。次のコードがあります:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
しかし、これはコンパイルされず、次のエラーが発生します。
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
何が間違っているのでしょうか?
ベストアンサー1
は必要ないことを指摘しておく価値がありますtypedef
。次のようにすればいいのです。
enum strategy { RANDOM, IMMEDIATE, SEARCH };
enum strategy my_strategy = IMMEDIATE;
を好むかどうかはスタイルの問題ですtypedef
。 がない場合、列挙型を参照したい場合は を使用する必要がありますenum strategy
。 がある場合、 とだけ言うことができますstrategy
。
どちらの方法にも長所と短所があります。1 つはより冗長ですが、型識別子をタグ名前空間に保持します。タグ名前空間では、型識別子は通常の識別子と競合しません (struct stat
とstat
関数を考えてみてください。これらも競合しません)。また、型であることがすぐにわかります。もう 1 つはより短いですが、型識別子を通常の名前空間に持ち込みます。