В дополнение к «Источники шаблона должны быть в заголовках», как указано в MSN, строки для ваших операторов перегруженного потока в исходном файле перечислены как:
template<typename T> istream &Array<T>::operator>>( istream &input, Array &a )
template<typename T> ostream &Array<T>::operator<<( ostream &output, const Array &a )
Однако правильный синтаксисто, что вы пытаетесь выполнить, это то, что используется в вашем заголовочном файле:
template<typename T> istream &operator>>( istream &input, Array<T> &a )
template<typename T> ostream &operator<<( ostream &output, const Array<T> &a )
Объявления в вашем заголовочном файле обычно называются операторами потока, не являющимися членами.Однако в вашем исходном файле определены операторы смены членов, которые нельзя использовать для потоковой передачи и должны иметь только 1 аргумент.
Если вы измените объявления, чтобы они соответствовали заголовочному файлу, это должно исключить вашпроблема компилятора.Тем не менее, вам также нужно будет поместить все содержимое вашего исходного файла в ваш заголовочный файл или в отдельный заголовок, который включен в конце первого.Если вы этого не сделаете, вы получите ошибки компоновщика при попытке создать свой исполняемый файл.