从QMap调用成员函数

时间:2012-11-21 12:57:39

标签: c++ qt qmap

我有一个类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();

任何人都可以告诉我',在这里做错了吗?我怎么解决这个问题?

1 个答案:

答案 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
}