使用地图时出错C2664

时间:2014-09-21 14:52:14

标签: c++ map

我正在尝试使用地图进行寻路,但遗憾的是我对它们并不熟悉。我假设我的Pathfinding.h中的这一行发生了以下错误:std::map<PathNode*, bool> mOpenMap;

"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*

1 个答案:

答案 0 :(得分:3)

错误确切地说明了您需要插入的内容。

根据您插入的错误@SiotrS说出指向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;
}