Problem mit iterator by QMap
-
Ich bekomme diese Fehlermeldung
.\include\qtdevices\CommonPositioningController.cpp:61: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
c:\Qt\SDK\2010.02.1\qt\include\QtCore/../../src/corelib/tools/qmap.h:254: note: candidate 1: QMap<Key, T>::iterator QMap<Key, T>::iterator::operator+(int) const [with Key = CommonPositioningController::PositioningStage, T = int]
..\include\qtdevices\CommonPositioningController.cpp:61: note: candidate 2: operator+(int, size_t) <built-in>
für diesen Quellcode:
void CommonPositioningController::selectStage(size_t stageItemIndex) { if (stageItemIndex < d->stageToAxisNumberMap.size()) { QMap<PositioningStage, int>::iterator i = d->stageToAxisNumberMap.begin() + stageItemIndex;hierbei ist PositioningStage ein enum.
Ich verstehe prinzipiell nicht was der Fehler eigentlich ist.
-
Der Fehler ist, dass du einen operator+ auf einen Iterator und einen size_t anwendest. einen solchen operator kennt der Compiler aber nicht, er kennt nur zwei Kandidaten, die durch umwandlung der Argumente erreicht werden können:
Iterator + int
int + size_tbei ersterem wird das size_t in ein int verwandelt (was du vermutlich willst), bei letzterem der Iterator in ein int.
Da bei beiden genau eine Umwandlung vonnöten ist, kann der Compiler nicht feststellen was die richtige Alternative ist.Als Lösung musst du es ihm sagen, indem du das eine Argument in einen int castest.
Das zeigt mal wieder, wie viele probleme Konvertierungsoperatoren machen können, weil der Compiler in solchen Fällen eben stillschweigend alle möglichen Konvertierungen in Betracht zieht.
-
pumuckl schrieb:
Der Fehler ist, dass du einen operator+ auf einen Iterator und einen size_t anwendest. einen solchen operator kennt der Compiler aber nicht, er kennt nur zwei Kandidaten, die durch umwandlung der Argumente erreicht werden können:
Iterator + int
int + size_tDie Qt4 QMap implementiert einen bidirektionalen Iterator. Da dürfte "Iterator + int" eigentlich nicht funktionieren.
@pospiech:
Was soll die ganze Operation auch logisch bedeuten? Eine Map wird nach ihrem ersten Argument (also PositioningStage) sortiert, ich erhalte also das n-te Element nach dieser Sortierung.Lars
-
manni66 schrieb:
pumuckl schrieb:
Die Qt4 QMap implementiert einen bidirektionalen Iterator. Da dürfte "Iterator + int" eigentlich nicht funktionieren.
Ok, die Trolle haben doch mehr implementiert.
Lars