C ++:如何正确重载<运算符?

时间:2019-10-30 13:51:22

标签: c++ set

我需要一个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&)<<近匹配>>

1 个答案:

答案 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