2012-11-21 22 views
2

我有一個類TypeData,並希望將該類型的對象存儲在QMap中,然後我想從地圖中獲取特定對象並調用此對象的成員函數。 但是當我嘗試這樣做,我得到了以下錯誤消息:從QMap中調用Memberfunctions

error C2662: 'TypeData::write': cannot convert 'this' pointer from 'const TypeData' to 'TypeData &' 

這裏是相關的代碼片段:

QMap<QString, TypeData> typeDataList; 

typeDataList.insert(currentID, temp); 

typeDataList.value(currentID).write(); 

誰能告訴我是什麼」,做錯了什麼?我該如何解決這個問題?

回答

3

QMAP ::值返回一個const T,即兩者複製在映射中的元件的非modifyable之一。你的write()方法可能不是const的,因此不允許在const T上調用write()。如果返回的值僅爲T,它將會起作用,但對臨時對象執行的任何更改write()都將立即丟失。 (因爲副本被立即銷燬)。

因此,如果不修改TypeData,您可以編寫write()const。 這是可取的,如果可能的話。

或者你可以這樣做:

typeDataList[currentID].write() // modifies the object in the map but also will insert a TypeData() if there is no entry for key currentID yet. 

,或者更冗長,但沒有如果沒有找到插入一個新元素:

QMap<QString,TypeData>::Iterator it = typeDataList.find(currentID); 
if (it != typeDataList.constEnd()) { 
    it->write(); 
} else { 
    // no typedata found for currentID 
} 
+0

謝謝!我會用第二種解決方案。 – samoncode