2

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

谁能告诉我在这里做错了什么?我该如何解决这个问题?

4

1 回答 1

3

QMap::value 返回 a const T,即映射中元素的副本和不可修改的副本。您的 write() 方法可能不是 const,因此不允许在 const T 上调用 write()。如果 value 返回 just 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
}
于 2012-11-21T18:53:49.387 回答