我需要一个std::set<std::pair<int,NodeA>>
。所以我需要重载NodeA的<运算符。我做到了,但是没有用。
void matriceLab::aStar(int* matX,const int x, const int y, const int endX,const int endY){
std::set<std::pair<int,NodeA>> nodi;
allocaNodi(nodi,matX,x,y,endX,endY);
}
void matriceLab::allocaNodi(std::set<std::pair<int,NodeA>>& nodi, int* matX,const int x, const int y,const int endX,const int endY){
for(int i = 0; i < x; i++){
for(int j = 0; j < y; j = j + 2){
NodeA nodo(i,j,endX,endY);
std::pair <int,NodeA> pair1(i + j * x, nodo);
nodi.insert(pair1);
}
}
}
class NodeA
{
//...
bool operator<(const NodeA& a){
if(posX < a.posX){
return true;
}else{
return false;
}
}
//...
}
C:\ TDM-GCC-32 \ lib \ gcc \ mingw32 \ 5.1.0 \ include \ c ++ \ bits \ stl_pair.h | 222 |错误: 与'operator <'不匹配(操作数类型为'const NodeA'和'const NodeA')|
C:\ Users \ cristina \ Desktop \universitàpdf \ Laboratorio di Programmazione \ progetti c ++ _ SFML_openGL \ SFML-2019-4-Grid \ NodeA.h | 24 |注:候选人:布尔 NodeA :: operator <(const NodeA&)<<近匹配>>
答案 0 :(得分:2)
参考:https://en.cppreference.com/w/cpp/language/operator_comparison
此参考文献说,operator<
作为成员函数的格式为:
bool T::operator <(const T2 &b) const;
您需要标记您的运算符定义const
,因为C ++希望您保证仅<
运算符将不会更改所涉及的对象,并且将使用声明的类的实例const
。
因此,您在运算符的重载函数中缺少关键字const
。您将必须编写:
bool operator<(const NodeA& a) const{
if(posX < a.posX){ ...
如果您想知道c ++的代码到底在何处提及此内容,可以查看一下StackOverFlow答案:https://stackoverflow.com/a/23927045/7865858