簡體   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