C ++ == перегрузка операторов (имплементации)

0

У меня есть прототипы, объявленные в ULong.h

  bool operator== (const ULong& ) const;
  bool operator== (unsigned long long) const;
  friend bool operator== (unsigned long long, const ULong&);

В ULong.cpp я пытаюсь их реализовать:

bool ULong::operator== (const ULong& ul) const
{
    if(_num_digits != ul._num_digits)
        return false;
    for(unsigned i = 0;i < _num_digits; i++)
    {
        if(_number[i] != ul._number[i])
            return false;
    }
    return true;
}

bool ULong::operator== (unsigned long long l) const
{
    return *this == ULong(l);
}

ULong operator== (unsigned long long l, const ULong& ul)
{
    return ULong(l) == ul;
}

И я получаю ошибку компилятора:

ULong.cpp: 358: 56: ошибка: новое объявление 'ULong operator == (long long unsigned int, const ULong &) В файле, включенном в ULong.cpp: 10: 0:

ULong.h: 76: 15: ошибка: неоднозначная старая декларация 'bool operator == (long long unsigned int, const ULong &)

Я не могу понять, как правильно реализовать этот метод.

Теги:
operator-overloading

3 ответа

2
Лучший ответ

В декларации говорится, что она возвращает bool. В определении говорится, что по какой-то причине он возвращает ULong. Это ваша ошибка, как уже сказал вам компилятор. Почему вы выбрали тип возврата в определении?

  • 0
    Спасибо! Это сработало.
2

Ваше объявление возвращает bool но ваша реализация возвращает ULong !

  • 0
    @JacobVoronin, да, я пропустил ключевое слово friend , ваша проблема - возвращаемый тип.
2

Тип возврата - проблема. В определении его ULong и он должен быть bool. ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню