“没有'运算符++(int)'在枚举上声明为后缀'++'[-fpermissive]”

时间:2013-12-24 18:00:11

标签: c++ gcc enums operator-overloading avr

我有枚举

enum ProgramID
{
    A = 0,
    B = 1,
    C = 2,
    MIN_PROGRAM_ID = A,
    MAX_PROGRAM_ID = C,

} CurrentProgram;

现在,我试图像这样增加CurrentProgramCurrentProgram++,但编译器抱怨:no 'operator++(int)' declared for postfix '++' [-fpermissive]。我认为有这样一个运算符会增加"枚举",但如果没有,我如何获得其中一个值的后继者?

2 个答案:

答案 0 :(得分:5)

没有这样的运算符用于枚举。但是你可以自己编写那个操作符。例如

ProgramID operator ++( ProgramID &id, int )
{
   ProgramID currentID = id;

   if ( MAX_PROGRAM_ID < id + 1 ) id = MIN_PROGRAM_ID;
   else id = static_cast<ProgramID>( id + 1 );

   return ( currentID );
}

答案 1 :(得分:2)

不,你错了,没有这样的操作员。

要获取下一个,请将您的值转换为int,将其递增,然后reinterpret_cast将其转换回enum。请注意,超出范围最终会导致未定义的行为,因此检查是个好主意。