Оператор = функция и функция добавления не могут сосуществовать - PullRequest
1 голос
/ 09 февраля 2012

У меня проблема с двумя из моих функций.У меня есть метод operator =, а также метод add.Они отлично работают сами по себе, так как я могу использовать только один или другой во время одной компиляции.Например, мне нужно закомментировать функцию add, чтобы метод operator = работал, и наоборот.Я получаю ошибки 10 no match for 'operator=' in 'c = (&a)->HUGE_INT::add(((HUGE_INT&)(&b)))'

     HUGE_INT HUGE_INT::operator=(HUGE_INT &orig)
        {
        //code
         return *this;
        }

        HUGE_INT HUGE_INT::add(HUGE_INT &a)
        {
         //code
         return object;
        }

//client
    HUGE_INT a(9999999),b(1111),c,d;
       c = a.add(b);
       d = a;

Ответы [ 3 ]

5 голосов
/ 09 февраля 2012

Проблема, с которой вы столкнулись, заключается в том, что вы возвращаете значение из add и переносите аргумент в operator= по неконстантной ссылке.

Временный объект, возвращаемый из add, является значением r, поэтому его нельзя привязать к неконстантной ссылке.

Если вы не делаете что-то очень странное, вы, вероятно, захотите изменить operator= на аргумент, ссылаясь на const:

    HUGE_INT& HUGE_INT::operator=(HUGE_INT const& orig)
    {
    //code
     return *this;
    }

(Я также изменил его для возврата по ссылке, так как это стандартная подпись для operator=.)

1 голос
/ 09 февраля 2012

Ваш operator= должен возвращать ссылку, а также принимать константную ссылку; то есть он должен иметь подпись HUGE_INT& HUGE_INT::operator=(const HUGE_INT& orig).

В качестве примечания, это действительно плохой стиль C ++ - использовать все заглавные буквы для имен классов. Все столицы обычно зарезервированы для макросов.

1 голос
/ 09 февраля 2012

Я исправил код для вас, конечно, он сейчас ничего не делает, как в вашем примере, но он компилируется. Причина в том, что вам нужно указывать аргумент оператора '=' как константу, и как указано другими авторами, вы также должны возвращать ссылку на объект.

class HUGE_INT
{
public:
HUGE_INT(){this->var = 0;}
HUGE_INT(int v){this->var = v;};

HUGE_INT& operator=(const HUGE_INT &orig)
{

 return *this;
}

HUGE_INT add(HUGE_INT &a)
{
    HUGE_INT object;
 return object;
}

private:
    int var;
};


int main()
{


//client
HUGE_INT a(9999999),b(1111),c,d;
   c = a.add(b);
   d = a;
}

Чтобы лучше понять, посмотрите учебник по перегрузке операторов

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