2013-02-19 60 views
4

當我嘗試編譯下面的代碼時出現編譯器錯誤:對基於範圍的循環的誤解?

for(binary_instructions_t &inst: BinaryInstructions){ 


} 

BinaryInstructions這是枚舉類:

typedef unsigned int binary_instructions_t; 

enum class BinaryInstructions : binary_instructions_t 
{ 
    END_OF_LAST_INSTR = 0x0, 

    RESET, 
    SETSTEP, 
    START, 
    STOP, 

    ADD, 
    REMOVE, 
}; 

我應該被允許「做了」基於使用循環範圍枚舉類中的項目?或者我在該範圍內巧妙地誤解了循環是爲了搜索數組的內容而不是類似枚舉類的東西?

我也曾嘗試:創建一個實例,並在實例中搜索:

BinaryInstructions bsInstance; 
for(binary_instructions_t &inst : bsInstance){ 


} 

但沒有雪茄提前...謝謝,

回答

8

範圍爲基礎的循環需要一個集合,像一個數組或一個向量。枚舉類不是一個集合。

但是,它是C++,所以有一個解決方法。請參閱:Allow for Range-Based For with enum classes?

+0

那甜甜的!我喜歡這個實現。比我使用的整體解決方案更加清潔。 – 2013-02-19 19:00:35

0

基於範圍的for-loops是一種輕鬆迭代元素列表的機制。 '元素列表'可以是普通數組或實現返回迭代器類型的beginend方法的類的實例。

例子:

int arr[] = { 1, 2, 3, 4 }; 
for (int cur : arr) 
    std::cout << cur << std::endl;