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 はconst T、つまり、マップ内の要素のコピーと変更不可能な要素の両方を返します。write() メソッドはおそらく const ではないため、const T で write() を呼び出すことは許可されていません。value だけが返された場合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 に答える