列挙体も当然クラスのメンバに出来ます。
<sample program cpp056-01>
#include <iostream>
class Field {
public:
enum {
FLOOR,
WALL,
};
private:
};
int main()
{
int ground;
ground = Field::FLOOR;
return 0;
}
|
publicで宣言すれば、所属を書く事でどこからでも参照出来ます。
これで普通に使えると思いますが、これまで無名の列挙体しか書いてきませんでしたので、少し説明をしようと思います。
※特にC++での使い方と言う訳ではありません。
元々列挙体は構造体と同じようにタグ名が付けられます。
enum Field {
FLOOR,
WALL,
};
|
Fieldと言うタグ名を付けた列挙体です。
構造体と同じように実体も作れます。
この場合の型は、
enum Field型 |
になります。
<sample program cpp056-02>
#include <iostream>
enum Field {
FLOOR,
WALL,
};
int main()
{
enum Field field;
field = FLOOR;
return 0;
}
|
代入できるのは列挙体で宣言した定数です。
他の型の数値を入れようとすると、
<sample program cpp056-02>
#include <iostream>
enum Field {
FLOOR,
WALL,
};
int main()
{
enum Field field;
field = FLOOR;
field = 3;
return 0;
}
|
<コンパイル結果>
error C2440: '=': 'int' から 'Field' に変換できません。 note: 列挙型への変換には static_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
エラーになりました。
C言語では、
enum Field型 |
ですが、C++では「enmu」は省略可能ですので、
Field型 |
でも大丈夫です。
C言語の場合も構造体と同じようにtypedefを使えば、
typedef enum {
FLOOR,
WALL,
} Field;
|
Field型 |
で扱えます。