Нет совпадения для оператора! = (Типами операндов являются указатель и объект) - PullRequest
2 голосов
/ 03 ноября 2019

Я перегружаю оба оператора == и != и хочу, чтобы последний ссылался на первый, чтобы вообще не повторять код. Вот что я написал:

bool Date :: operator == (const Date & other) const {
    bool are_equal = Year() == other.Year();

    for (int i=0; i<other.NumEvents() && are_equal; i++)
        are_equal = this[i] == other[i];

    return are_equal;
}

bool Date :: operator != (const Date & other) const {
    return !(this == other);
}

Большая проблема здесь в том, что this это не Date, а Date*. Есть ли способ сослаться на this Date без указателя или с помощью this вместе с other Date?

Ответы [ 3 ]

5 голосов
/ 03 ноября 2019

Разыменование указателя:

return !(*this == other);
2 голосов
/ 03 ноября 2019

Вам нужно разыменовать указатель this, чтобы вызвать ваших операторов для объекта Date, на который он ссылается, например:

bool Date :: operator == (const Date & other) const {
    bool are_equal = ((Year() == other.Year()) && (NumEvents() == other.NumEvents()));

    for (int i = 0; (i < other.NumEvents()) && are_equal; ++i) {
        are_equal = ((*this)[i] == other[i]);
    }

    return are_equal;
}

bool Date :: operator != (const Date & other) const {
    return !((*this) == other);
}
1 голос
/ 03 ноября 2019

Вы можете попытаться перегрузить != функцию следующим образом:

bool Date :: operator != (const Date & other) const {
    return !(*this == other);
}
...