Вам нужно сделать свой параметр const
, потому что на данный момент вы даете ему бесплатную ссылку, что означает, что вы можете изменить объект, с которым сравниваете. (Которым вы не являетесь, и, вероятно, не должны).
Ты не в порядке. Ваш operator<
не вносит изменений в узел, поэтому функция должна быть постоянной:
bool operator<(const Node &aNode) const;
После этого, если у вас возникли проблемы с вызовом функции getTotalCost()
, вполне вероятно, что она также не является константой. Отметьте это как const, если это еще не:
int getTotalCost(void) const;
Ваш код теперь (более) const-правильный.
Кстати, бинарные операторы обычно реализуются вне класса:
class Node
{
public:
// ...
int getTotalCost(void) const;
// ...
};
bool operator<(const Node& lhs, const Node& rhs)
{
return lhs.getTotalCost() < rhs.getTotalCost();
}