2011-05-03 49 views
1

我正在使用一個QList,我想迭代器雖然它,但我從它得到的迭代器保持失敗,即使我使用自動關鍵字或不。QList :: iterator只返回(錯誤)0

for(auto iter = myModel->getList().begin(); iter != myModel->getList().end(); ++iter) 
{ 
    if((*iter)->getList().empty()) 
    { 
     if((*iter)->getData()->getCode() == baseData->getCode()) 
      return true; 
    } 
} 
return false; 

有沒有人知道爲什麼會發生這種情況?還是有一種不同的方式來使用QList :: iterator?

EIDT: 我注意到另一個奇怪的事情。我確實看到迭代器顯示(錯誤)爲0,這很奇怪,因爲它實際上包含我需要的數據。

但是,如果我修改我的代碼看起來像這樣:

QList<T*> tempList = myModel->getList();  
for(auto iter = tempList .begin(); iter != tempList .end(); ++iter) 
     { 
      if((*iter)->getList().empty()) 
      { 
       if((*iter)->getData()->getCode() == baseData->getCode()) 
        return true; 
      } 
     } 
     return false; 

然後一切工作正常。我想這是一個解決方案,但有誰知道爲什麼需要這樣做?或者我只是沒有看到一些非常重要的東西?

+0

究竟返回0?這些變量的類型是什麼,你確定myModel-> getList()返回你想要的嗎? – 2011-05-03 17:53:58

+0

它是一個QList :: iterator和myModel-> getList()返回一個QList ,所以當我使用begin()時,它應該給我myModel-> getList()的迭代器。無論哪種方式,因爲我使用的是auto關鍵字,只要getList()返回一個QList,它應該是一個迭代器到某個列表 – Keerigan 2011-05-03 17:57:49

回答

2

我看到兩個問題的代碼。

一)myModel->getList()返回你的QList副本像這樣聲明:

QList<T*> YourModel::getList() 

你真正應該得到一個訪問衝突。但我不知道這是怎麼回事。 b)如果你只依賴Visual Studio關於iter的說法,忘記它,它是錯誤的。它只是無法處理迭代器。 Allthough迭代器說它的(錯誤)0是一個整數,如果解除引用,它仍會給你正確的數據。

如果以上都不是這種情況,請說明實際發生了什麼問題,for循環beeing會一起跳過嗎?如果是這樣,我會相應地編輯我的答案。

問候
d

編輯 爲什麼它工作正常使用臨時表對象的原因如下: 您創建列表的begin()方法的迭代器的那一刻,名單脫離其私人數據(隱式共享),這意味着它會創建一個自身的深層副本,因爲您可以使用該迭代器更改數據。沒有臨時對象myModel->getList()創建了一個臨時對象,在迭代器創建後立即被銷燬。從迭代器上的那一刻起,它指向任何地方。你可以嘗試使用const iterator,這個工作不需要分離私人數據,因此沒有問題。 另一種方法是讓模型返回列表作爲常量引用或指針。 另一種方法是放棄迭代器並直接使用列表的at()方法。在我看來,使代碼更具可讀性。

+0

我注意到有(錯誤)0的東西,它確實包含正確的數據。但我也注意到了另一件奇怪的事情。我會編輯並添加到我的問題,告訴你 – Keerigan 2011-05-04 12:41:23

+0

我已經更新了我的答案。希望這會解釋它。由於QList, – 2011-05-04 13:44:24

+0

是複製問題嗎? – Keerigan 2011-05-04 13:58:51

1

myModel-> getList返回什麼類型?

除非你有一個列表的列表這一行看起來可疑:

if((*iter)->getList().empty()) 

不管怎麼說,調用自己的整體看好。唯一真正的解釋要麼取決於你的類型,要麼取決於你的數據(或者缺少數據)你發佈的代碼中沒有明確的問題。

+0

我將要做一些遞歸,以便該行確定是否需要去更深層次,但我甚至沒有做到這一點,當在for循環中創建時iter爲0 – Keerigan 2011-05-03 18:20:41

+0

我並不是說當我問這個問題時會居高臨下,但是myModel-> getList的結果是什麼( )。計數()? – Arelius 2011-05-03 18:22:53

+0

不用擔心,我得到5回 – Keerigan 2011-05-03 18:28:34