2013-01-09 27 views
-2
for (auto iter = dlQueue.cbegin(); iter != dlQueue.cend(); ++iter)  
     { 
       // reference to the current element in the container 
       if (*iter.id == listid) 
       { 
         *iter.stall = newstall & 0xFFFFFFF; 
       } 
     } 

當我解引用iter引用的對象時,我將能夠檢查對象的狀態;即id。或者這隻會給我一個迭代器的回報。當解引用迭代器時,這是有效的

我不能去:

iter -> id 

DlQueue是出隊。

+0

如果您要修改'* iter',則不能使用'cbegin'和'cend'。 – chris

+1

@TheBlueCat:'* iter.stall = newstall&0xFFFFFFF;'看起來像對我的修改。 –

+0

@SteveJessop對,對不起。我沒有讀最後一行。 – TheBlueCat

回答

2

不,您引用的代碼是錯誤的。

.具有比一元*更高的優先級。要訪問iter所提及的元素的成員,您應該寫入(*iter).iditer->id,而不是*iter.id

+0

我認爲是這樣的。我只認爲iter-> id是爲了成員函數。 – TheBlueCat

+0

這是成員函數和數據成員。 –

0

你試過了嗎?如果你有編譯錯誤,請告訴我們是什麼。 另外,看到dlQueue的類型會非常有幫助。

兩個(*iter).iditer->id應導致常量引用ID(假設dlQueue保存與可訪問成員的對象稱爲id)。您不能分配給常量引用,但這與您選擇的*iter.iter->無關。


如果需要修改你遍歷項目,使用的begin代替cbegin

for (auto iter = dlQueue.begin(); iter != dlQueue.end(); ++iter) 
+0

這是一個很大的項目,所以需要一點時間來編譯這個東西。 – TheBlueCat

+0

你問我們語法檢查你甚至沒有編譯過的代碼?好悲傷。 – Useless

+0

這還不是重點。我甚至不知道它是否正確。這是一個3d渲染的大型項目,所以我懷疑我會知道。 – TheBlueCat

0

我固定在你的代碼中的明顯錯誤:

for (auto iter = dlQueue.begin(); iter != dlQueue.end(); ++iter) { 
    // if the id matches: 
    if (iter->id == listid) { 
    // assign to stall a bitmasked version of newstall: 
    iter->stall = newstall & 0xFFFFFFF; 
    } 
} 

有幫助嗎?

相關問題