c ++ переопределяет оператор >> для класса Array

0

Я пытаюсь переопределить оператор >> для собственного класса Array:

std::istream& operator>>(std::istream& input, Array& array) {
for (int i = 0; i < array.size; i++)
    input >> array[i];

return input;
}

Но я становлюсь следующей ошибкой:

std :: istream & Array :: operator >> (std :: istream &, const Array &) 'должен принимать ровно один аргумент

Все примеры, которые я видел, реализованы именно так. Я не знаю, почему компилятор хочет получить один аргумент? Что мне делать?

  • 0
    Это отличается, когда вы реализуете его вне класса или изнутри. Если вы находитесь внутри класса Array, вам нужен один параметр.
Теги:
arrays
override
istream

2 ответа

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

Если operator>> является членом класса, он будет работать с объектом Array и взять тот параметр, который вы ему даете:

Array a;
a >> whatever;

Кажется, вам нужен istream чтобы писать в него, что означает, что он не является членом, поэтому либо перемещайте его за пределы класса, либо объявляйте его как friend (что фактически делает его нечленом):

class Array
{
//.........
friend std::istream& operator>>(std::istream& input, Array& array) {
   for (int i = 0; i < array.size; i++)
      input >> array[i];

   return input;
}
};
  • 0
    спасибо за Ваш ответ
0

При определении внутри класса двоичные операторные функции должны иметь только один аргумент (потому что левый аргумент неявно *this). Вы должны определить экстрактор как свободную функцию, которую вы можете сделать, определив ее вне класса. Кроме того, если экстрактор должен получить доступ к закрытым переменным, вы можете определить/объявить его как friend внутри класса.

  • 0
    большое спасибо за ответ

Ещё вопросы

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