2014-09-21 65 views
-2

我想爲我的尋路使用地圖,但不幸的是我不太熟悉它們。我做的是在這條線出現以下錯誤的假設在我Pathfinding.hstd::map<PathNode*, bool> mOpenMap;錯誤C2664使用地圖

"Error 1 error C2664: 'std::pair<const _Kty,_Ty>::pair(const std::pair<const _Kty,_Ty> &)' : cannot convert argument 1 from 'PathNode *' to 'const std::pair<const _Kty,_Ty> &' c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0 600 1 Pac3D"

我想這是可行的,因爲我已經看到了類似的方式使用它人,但無論是我做錯了什麼或者不應該這樣工作,我在考慮後者。

有沒有人有任何關於如何解決這個問題的指針?我會很樂意應要求發佈更多的代碼。

編輯:我用mOpenMap.emplace(start, true);把我的第一個節點內,從那裏出來它通常是currentNode,無一不是PathNode*

+0

我猜你正在使用'mOpenMap.insert(新PathNode);'或類似的東西? – 2014-09-21 14:59:21

+0

我使用'mOpenMap.emplace(start,true);'在我對地圖 – 2014-09-21 15:10:27

+0

執行任何操作之前,currentNode是'PathNode *'類型的,對吧? – 2014-09-21 15:10:54

回答

3

錯誤說你需要插入到底是什麼。

根據你插入的@PiotrS錯誤說一個指向PathNode,你需要插入一對(key, value)mOpenMap.insert(std::make_pair(key, value));其中關鍵const PathNode*類型和bool型的。

示例代碼:

#include <map> 
#include <iostream> 

int main() { 
    int a = 1, b = 2, c = 3; 
    std::map<int*, bool> mOpenMap; 
    mOpenMap.insert(std::make_pair(&a, true)); 
    mOpenMap.insert(std::make_pair(&b, true)); 
    mOpenMap.insert(std::make_pair(&c, false)); 
    for (auto it = mOpenMap.cbegin(); it != mOpenMap.cend(); ++it) { 
     std::cout << *it->first << ": " << it->second << std::endl; 
    } 
    return 0; 
} 
+0

啊,是的,非常感謝。正如我所說我對地圖不是很熟悉,所以這對我來說是一個非常容易的錯誤。下次我一定會避免它。 – 2014-09-21 15:15:51