我有一个类TypeData,想要在QMap中存储该类型的对象,然后我想从地图中获取一个特定的对象并调用该对象的成员函数。 但是当我尝试这样做时,我收到以下错误消息:
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();
任何人都可以告诉我',在这里做错了吗?我怎么解决这个问题?
答案 0 :(得分:3)
QMap :: value返回const T
,即地图中元素的副本和不可修改的。你的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
}