2013-05-06 3 views
0

Я пытаюсь перегрузить оператор '<', чтобы я мог использовать std :: map в проекте. Прототип в определении класса выглядит следующим образом: bool operator<(const Vertex&);, а тело функции выглядит следующим образом:Ошибка при перегрузке оператора '<' для карты

bool Vertex::operator <(const Vertex& other){ 
    //incomplete, just a placeholder for now 
    if(px != other.px){ 
     return px < other.px; 
    } 
    return false; 
} 

и ошибка я получаю это: /usr/include/c++/4.7/bits/stl_function.h:237:22: error: passing ‘const Vertex’ as ‘this’ argument of ‘const bool Vertex::operator<(Vertex)’ discards qualifiers [-fpermissive]

+0

Проверка неравенство не должно иметь значение, так как 'рх chris

+0

Функция не является полной, если px одинаковы, я перехожу к следующей переменной-члену, чтобы определить разницу. – AdamSpurgin

+1

Я не мог удержаться, чтобы указать на это, если бы это было не так. В любом случае, теперь, когда вы сказали это, вы должны просто использовать что-то вроде 'std :: make_pair' или' std :: tie', чтобы сгруппировать эти два фактора вместе (например, 'std :: make_pair (px, py) chris

ответ

1

Поскольку ваша operator< перегрузка не изменяет объект, на который указывает this, вы должны пометить его как функцию-член const. То есть, для объявления, добавьте const до конца:

class Vertex { 
    // ... 
    bool operator<(const Vertex& other) const; 
    // ... 
}; 
+0

Спасибо, что сделал. – AdamSpurgin

1

Вашей функция нуждается в const спецификаторе :

bool Vertex::operator <(const Vertex& other) const { 
    //... 
} 

это означает, что он может быть вызван const объектов.

Смежные вопросы