Работа с оператором [] и оператором = - PullRequest
3 голосов
/ 04 мая 2010

Учитывая простой класс, который перегружает оператор '[]':

class A
{
  public:
    int operator[](int p_index)
    {
       return a[p_index];
    }

  private:
    int a[5];
};

Я бы хотел сделать следующее:

void main()
{
   A Aobject;

   Aobject[0] = 1;  // Problem here
}

Как в этом случае перегрузить оператор присваивания '=' для работы с оператором '[]'?

Ответы [ 3 ]

16 голосов
/ 04 мая 2010

Вы не перегружаете оператор =. Вы возвращаете ссылку.

int& operator[](int p_index)
{
   return a[p_index];
}

Обязательно укажите const версию:

const int& operator[](int p_index) const
{
   return a[p_index];
}
5 голосов
/ 04 мая 2010

Сделайте так, чтобы он возвращал ссылку:

int & operator[](int p_index)
{
   return a[p_index];
}

Обратите внимание, что вам также понадобится константная версия, которая возвращает значение:

int operator[](int p_index) const
{
   return a[p_index];
}
0 голосов
/ 22 февраля 2018

Проблема в том, что вы возвращаете значение, содержащееся в переменной a.

В main вы пытаетесь назначить переменную int, которая недоступна.

Вы бы увидели ошибку компиляции "ошибка C2106: '=': левый операнд должен иметь значение l", как это.

Означает, что значение не может быть присвоено переменной, которая недоступна.

Пожалуйста, измените тип возвращаемого значения функции перегрузки оператора [] на ссылку или указатель, чтобы она работала нормально.

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