初歩的な質問で恐縮です。
enumで定義した値が連番になっているとき、この定数1を足したり引いたりすると
隣の値になる、ということは、どうすればできるのでしょうか。
enum X{A,B,C,D};と置いたときに
X x=A;
x++;
としてxをBにしようとしたのですが、++の箇所にて、
「Error:列挙された型でこの操作には、該当するユーザー定義演算子が必要です」
と出ました。
ユーザー定義演算子とは、どのように作るものなのでしょうか。
enumにした値はint型だと聞いているので、足したり引いたりできるはずですが、
どうも上手くいきません。
お忙しいとは存じますが、よろしくお願いします。
まず、enumはintではありません。
とれる値の範囲がintと同じなだけです。
次に、本来、enum型は「変化しない値」を意味するので、
++の様に「値が変化する演算はできない」わけですね。
従って、
1.++したいのならenumでない型を使用する。又は
2.enum型を使用したいなら、その型に対して
値が変化する演算はしてはいけない。
ということになります。どちらかを選びましょう。
さて、とは言うもののデバッグ時など、一時的にenumに演算をしたい
場面も考えられます。こういった場合は、一旦int型に代入してから
(あえてキャストはお勧めしません)演算しましょう。
++の結果がX型じゃなくてもいいのなら
int x = A;
x++;
にすればいいけど,
X型じゃないとダメな場合は
const X XArray[4] = { A,B,C,D };
for( int i=0; i<4; i++ )
{
X x = XArray[i];
...
}
みたいなことはたまにやる.
ご返答、ありがとうございます。
X x=A;
ではなく、
int x=A;
としました。
お騒がせ致しました。