-2
的錯誤我創建了Node類的一些實例和Node類的向量,然後我將這些實例推入向量, ,我創建了函數對象「ListCompare」對向量進行排序。std :: sort
但是,我收到錯誤「沒有匹配函數調用類型爲」ListCompare「類型的對象在排序函數中。
爲什麼我會收到錯誤?
我寫了下面的代碼和錯誤。
#include <iostream>
#include "cocos2d.h"
using namespace cocos2d;
class Node
{
public:
Node(int x,int y,CCPoint playerTilePos): m_tilePosX(x),m_tilePosY(y),m_costFromStart(0),m_costFromNextToGoal(0),m_playerTilePos(playerTilePos){};
Node(const Node &obj);
virtual ~Node(){};
int getPosX(void) const { return m_tilePosX; }
int getPosY(void) const { return m_tilePosY; }
int getTotalCost(void) const { return m_costFromStart + m_costFromNextToGoal; }
int getConstFromStart(void) const { return m_costFromStart; }
void setCostFromStart(int var) { m_costFromStart = var; }
int getCostFromNextToGoal(void)const { return (std::abs((int)m_playerTilePos.x - m_tilePosX) + std::abs((int)m_playerTilePos.y - m_tilePosY));}
void setCostNextToGoal(int var) { m_costFromNextToGoal = var; }
bool operator == (Node node)
{
return (m_tilePosX == node.m_tilePosX && m_tilePosY == node.m_tilePosY);
}
void operator = (Node node)
{
m_tilePosX = node.m_tilePosX;
m_tilePosY = node.m_tilePosY;
m_costFromStart = node.m_costFromStart;
m_costFromNextToGoal = node.m_costFromNextToGoal;
}
private:
int m_tilePosX;
int m_tilePosY;
int m_costFromStart;
int m_costFromNextToGoal;
CCPoint m_playerTilePos;
};
std::vector<Node>List;
class ListCompare{
public:
bool operator()(Node& pNode1,Node& pNode2)
{
return pNode1.getTotalCost() > pNode2.getTotalCost();
}
};
//--------------------------------------------------------------
// START
//--------------------------------------------------------------
void main()
{
List openList;
//initialize
CCPoint pos = ccp(100,100);
Node startNode(10,10,pos);
//cost is 1000
startNode.setCostNextToGoal(1000);
std::cout << startNode.getTotalCost << std::endl; //totalcost = 0 + 1000 = 1000
openList.pushBack(startNode);
Node nextNode(20,20,pos);
NextNode.setCostNextToGoal(2000);
std::cout << NextNode.getTotalCost << std::endl; //totalcost = 0 + 2000 = 2000
openList.pushBack(NextNode);
std::sort(openList.begin(),openList.end(),ListCompare());
}
--------------------------------錯誤--------- -------------------------
template<typename _Tp, typename _Compare>
inline const _Tp&
__median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp)
{
// concept requirements
__glibcxx_function_requires(_BinaryFunctionConcept<_Compare,bool,_Tp,_Tp>)
if (__comp(__a, __b)) //the error part."No matching function for call to object of type "ListCompare" "
if (__comp(__b, __c))
return __b;
else if (__comp(__a, __c))
return __c;
else
return __a;
else if (__comp(__a, __c))
return __a;
else if (__comp(__b, __c))
return __c;
else
return __b;
}
請張貼一些最小的代碼來重現問題。但是,確保'ListCompare'是在std :: sort'中使用之前定義的,並將相關簽名更改爲'bool operator()(const Node&pNode1,const Node&pNode2)const' – juanchopanza
您的賦值和拷貝構造函數在如果使用'Node'類將顯示未定義的行爲。您無法複製'CCPoint'成員,因此,即使您更改爲使用const引用作爲參數,std :: sort也無法正常工作。 – PaulMcKenzie
謝謝你的回答。很抱歉,答覆遲到了。我忘了在我的代碼中定義複製構造函數。當我更改爲使用const引用時,我解決了錯誤。 – user3321541