簡體   English   中英

如何在VS C ++ 6.0中增加枚舉?

[英]How do I increment an enum in VS C++ 6.0?

我復制並粘貼了一些增加枚舉的代碼:

myenum++;  

這段代碼在VS.NET C ++ 2003中編譯時效果很好

我現在正在VS 6.0中開發並得到錯誤:

錯誤C2676:二進制'++':'枚舉ID'未定義此運算符或轉換為預定義運算符可接受的類型

我怎樣才能讓它在6.0中表現相同?

我認為在一個易於理解的枚舉上定義operator ++沒有錯。 這不是運算符重載的目的嗎? 如果上下文沒有意義(例如,帶有洞的枚舉),那么當然它沒有意義。 為實現復數的復雜類定義operator *不僅有效,而且是C ++中數學運算符重載的一個很好的應用!

如果開發人員定義了一個枚舉,其中operator ++對該枚舉的客戶端有明顯的直觀意義,那么這就是該運算符重載的一個很好的應用。

enum DayOfWeek {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
inline DayOfWeek operator++(DayOfWeek &eDOW, int)
{
   const DayOfWeek ePrev = eDOW;
   const int i = static_cast<int>(eDOW);
   eDOW = static_cast<DayOfWeek>((i + 1) % 7);
   return ePrev;
}

枚舉可能是整體的,但並不意味着它涵蓋了連續的范圍。

這個

enum {
  A, 
  B,
  C,
}

可能 默認為

enum {
  A = 0, 
  B = A + 1,
  C = B + 1,
}

所以你可以逃脫

int a = A;
a++;

但是,如果你有

enum {
  A = 2, 
  B = 4,
  C = 8,
}

現在+1不會起作用。

現在,如果你也有類似的東西

enum {
  FIRST,
  A = FIRST, 
  B,
  C,
  LAST = C
}

然后在迭代枚舉時你會做A和C兩次嗎?

迭代枚舉的目的是什么? 你想做'為所有'或某些子集,是否實際上有枚舉的命令?

我將它們全部放在容器中並反復進行迭代

  • 無序 - 使用一套
  • ordered - 向量或列表

請嘗試轉換為int,添加一個(+1)並轉換回枚舉。

myenum=(myenum_type)((int)myenum+1);

這很難看,但它確實有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM