• ベストアンサー

enumについて

enumでタグを指定しないで、宣言することは可能でしょうか?? もし可能だあれば、どのように宣言し、参照する際はどのようになるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

列挙型宣言の書式は enum タグ名 { 列挙定数宣言 } 列挙型変数名 ; enum タグ名 { 列挙定数宣言 } ; enum タグ名 列挙型変数名 ; enum { 列挙定数宣言 } 列挙型変数名 ; enum { 列挙定数宣言 } ; よって、 enum RGB { red, green, blue } rgb ; enum CMY { cyan, magenta, yellow } ; enum CMY cmy ; enum { black, white } monochrome ; enum { gold, silver } ; 全て有効な宣言です。 参照時は rgb = red ; cmy = cyan ; monochrome = black ; Cの場合、列挙型は整数型と相互に代入可能なので int col = gold ; C++では列挙型はクラス型なので多少話がややこしくなり、適切なキャスト無しに他の型との相互代入はできません。

dole
質問者

お礼

ありがとうございます!! >enum { gold, silver } ↑ このケースがなぞだったのです。 質問の仕方がへたでスイマセンでした。

その他の回答 (2)

回答No.2

#1の方がばっちり例示されていますが。 できます。 宣言時に列挙型名を省略して変数名だけを書くと、無名の列挙型ができます。 その宣言でしか変数名を作らないときに使います。 enum { BLACK, RED, GREEN, BLUE, WHITE } colors; 宣言はこんな感じで、 colors = BLUE; みたいに使います。 一種の略記法らしいです。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

例えば、C++ だと、こんな感じ。 #include <iostream.h> class A { public: enum { E1, E2 } x; }; int main() { A a; a.x = A::E2; cout << a.x << endl; return 0; } C なら、こんな感じ。 #include <stdio.h> int main() { enum { E1, E2 } x; x = E2; printf("%d\n", x); return 0; }

関連するQ&A