идентификатор "оператор + =" не определен - PullRequest
0 голосов
/ 21 апреля 2019

Я хочу реализовать оператор "+" с помощью делегирования. Но когда я хочу использовать оператор «+ =», он не может его найти.

Money Money::operator +=(const Money &m)noexcept
{
    rouble += m.rouble;
    penny += m.penny;
    return *this;
}

Money operator + (const Money &first, const Money &second) noexcept
{
    return operator+=(second);
           ^^^^^^^^^
}

1 Ответ

3 голосов
/ 21 апреля 2019

Ваша вторая функция (operator+) является автономной, она не является участником.Ваша первая функция (Money::operator+=) является функцией-членом;вы не можете просто использовать функцию + = member, как если бы она была автономной.

Итак, во второй функции вы, вероятно, захотите сделать что-то вроде:

Money operator+ (const Money &first, const Money &second) noexcept
{
    Money sum{first}; 
    sum += second; 
    return sum; 
}

Имеясказал, что - вы также должны следовать совету @ πάνταῥεῖ и читать:

Каковы основные правила и идиомы для перегрузки операторов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...