繁体   English   中英

将项目从qt4迁移到qt5时,没有匹配的调用函数

[英]no matching function for call when migrating project from qt4 to qt5

我正在将项目从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代替,但它仍然是相同的错误。

我通过转弯解决了

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属性的字符串值,除了少数不需要做太多更改的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM