Я пытаюсь переопределить оператор >> для собственного класса 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 &) 'должен принимать ровно один аргумент
Все примеры, которые я видел, реализованы именно так. Я не знаю, почему компилятор хочет получить один аргумент? Что мне делать?
Если 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;
}
};
При определении внутри класса двоичные операторные функции должны иметь только один аргумент (потому что левый аргумент неявно *this
). Вы должны определить экстрактор как свободную функцию, которую вы можете сделать, определив ее вне класса. Кроме того, если экстрактор должен получить доступ к закрытым переменным, вы можете определить/объявить его как friend
внутри класса.