2016-06-07 2 views
-3

저는 Node * (openList)의 벡터를 가지고 있으며 targetNode가 주어지면 노드 *에 반복자를 가져 오려고합니다. 그것은 x & z 위치를 확인해야합니다. 일치하는 것이 발견되면이 노드 *가 이미 있음을 알 수 있습니다. 이것은 내가 비주얼 스튜디오를 통해, 나는 람다 식에 의해 체포되지 않는 openList에 여러 개의 동일한 항목이있는 것으로 나타났습니다 단계 때 나는오브젝트 포인터의 벡터에서 오브젝트를 찾을 수 없습니다.

auto iter = std::find_if(openList.begin(), openList.end(), [&targetNode](const Node* p) 
       { 
        return (targetNode->GetXPos() == p->GetXPos() && targetNode->GetZPos() == p->GetZPos()); 
       }); 
if (iter != openList.end()) 
{ 
    ....do something 
} 

을 것입니다. 아무도 do not-something 루프에 들어간 적이 없기 때문에 내가 잘못한 것을 나에게 알려줄 수 있었습니까? 고마워.

+4

정수 또는 부동 소수점을 비교하고 있습니까? – Galik

+0

'GetXPos() 및 GetZPos()'의 반환 유형은 무엇입니까? – sameerkn

답변

1

해당 코드에는 아무런 문제가 없습니다. 이 문제는 아마도 GetXPos()GetZPos()이 반환 한 것과의 비교에 있습니다.

정수 인 경우 정상이어야하며 코드가 작동해야합니다.

두 개 또는 부동 소수점 숫자 인 경우 다른 방법으로 (see this StackOverflow question)을 사용해야합니다.

해당 개체가 귀하가 구현 한 개체 인 경우 해당 개체가 동일한 것으로 결정되었는지 다시 확인하십시오 (해당 개체의 operator== 구현).

관련 문제