我正在将项目从Qt4迁移到Qt5,事实上我已经完成了迁移,但现在我必须迁移库,我遇到了一个我无法解决的问题:
..\qenc\ShapeLandPOI.cpp: In member function 'virtual void ShapeLandPOI::draw(QPainter*)':
..\qenc\ShapeLandPOI.cpp:74:92: error: no matching function for call to 'QMap<QString, ShapeAttribute>::iterator::iterator(QMap<QString, ShapeAttribute>::const_iterator)'
AttributeSet::iterator vItPOI = (AttributeSet::iterator)attributes.at(i).find("POI");
note: candidates are:QMap<Key, T>::iterator::iterator(QMap<Key, T>::Node*) [with Key = QString; T = ShapeAttribute; QMap<Key, T>::Node = QMapNode<QString, ShapeAttribute>]
inline iterator(Node *node) : i(node) { }
^
在那之后我得到了另一个错误,但是我认为一旦上面的错误得到解决,这个问题就不会成为问题了,尽管它可能有助于了解最新情况:
..\..\..\..\..\Qt5\5.2.1\mingw48_32\include\QtCore/qmap.h:423:16: note: no known conversion for argument 1 from 'QMap<QString, ShapeAttribute>::const_iterator' to 'QMap<QString, ShapeAttribute>::Node* {aka QMapNode<QString, ShapeAttribute>*}'
..\..\..\..\..\Qt5\5.2.1\mingw48_32\include\QtCore/qmap.h:422:16: note: QMap<Key, T>::iterator::iterator() [with Key = QString; T = ShapeAttribute]
inline iterator() : i(0) { }
^
这两条线路存在问题:
AttributeSet::iterator vItPOI = (AttributeSet::iterator)attributes.at(i).find("POI");
AttributeSet::iterator vItPOI0 = (AttributeSet::iterator)attributes.at(i).find("POI0");
老实说,我不知道如何更正这些线,以便它们与建议的候选功能相匹配。 我希望有人可以对这个问题有所了解。 三江源。
编辑:我尝试过使用static_cast,但仍然存在相同的错误。
答案 0 :(得分:0)
我通过转动
解决了这个问题AttributeSet::iterator vItPOI = (AttributeSet::iterator)attributes.at(i).find("POI");
到
ShapeAttribute vItPOI = attributes.at(i).find("POI").value();
并且改变了很少的代码部分,例如我有
if (vItPOI == attributes.at(i).end()) continue;
并将其更改为
if (attributes.at(i).find("POI") == attributes.at(i).end()) continue;
所以功能应该保持不变。我很幸运,因为变量只用于获取shape属性的字符串值,除了一些ifs我不需要做太多改变。