我正在尝试使用地图进行寻路,但遗憾的是我对它们并不熟悉。我假设我的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*
答案 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;
}