Я пишу HeartbeatManager
для моего приложения (в visual studio).Данные 1 пульса хранятся в объекте Heart
.Объекты Heart
хранятся в std::set
.По этой причине я реализую перегрузки operator=
, operator<
и operator>
.
При определении этих функций вы можете использовать только элементы const
.Я пытался сделать это, но все равно получаю сообщение об ошибке, говоря, что я не:
passing const HeartbeatManager::Heart' as 'this' argument of 'bool HeartbeatManager::Heart::operator<(const HeartbeatManager::Heart&)'
discards qualifiers [-fpermissive]
Вот код.Я не понимаю, где я использую непостоянную:
class HeartbeatManager
{
public:
class Heart
{
public:
Heart(const IPAddress _ip, const uint16_t _port, int _lifetime = 5000)
: ip(_ip), port(_port), lifetime(_lifetime) {}
const IPAddress ip;
const uint16_t port;
int lifetime;
/**
* Ages the Heart, returns whether it survived (lifetime after aging > 0)
*/
bool age(int ms)
{
this->lifetime -= ms;
return 0 < this->lifetime;
}
// overloaded operators so heart struct can be sorted and used in map
bool operator=(const Heart& o) {
return ip == o.ip && port == o.port;
}
bool operator<(const Heart& o) {
return (uint32_t)ip < (uint32_t)o.ip || (ip == o.ip && port < o.port);
}
bool operator>(const Heart& o) {
return (uint32_t)ip > (uint32_t)o.ip || (ip == o.ip && port > o.port);
}
};
void heartbeat(IPAddress ip, uint16_t port, int sec = 5000);
};
Я очень плохо знаком с C ++.Поэтому, если это плохая практика для приведения объекта в соответствие с установленными требованиями, не стесняйтесь сообщить мне.