У меня есть прототипы, объявленные в 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 &)
Я не могу понять, как правильно реализовать этот метод.
В декларации говорится, что она возвращает bool
. В определении говорится, что по какой-то причине он возвращает ULong
. Это ваша ошибка, как уже сказал вам компилятор. Почему вы выбрали тип возврата в определении?
Ваше объявление возвращает bool
но ваша реализация возвращает ULong
!
friend
, ваша проблема - возвращаемый тип.
Тип возврата - проблема. В определении его ULong и он должен быть bool. ;)