Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 21
1

Перегрузка операторов ввода и вывода из потока в шаблонном классе

23.09.2016, 20:19. Показов 1123. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Пишу свой вектор. В нём надо перегрузить вышеназванные операторы.
Vector.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Vector
{
    // ...
    friend std::ostream&  operator<< (std::ostream&, Vector<T> &);
    // ...
};
 
template<typename T>
std::ostream Vector<T>::operator << (std::ostream os, Vector<T> & v)
{
    for(int i=0;i<v.size();i++)
    {
          os << v.at(i) << " ";
    }
    return os;
}
Честно говоря понятия не имею почему ф-я должна быть дружественной (если знаете поясните пожалуйста), но если убрать friend, то при компиляции 129 ошибок, а с ним 1 критическая и одно предупреждение
1) предупреждение: friend declaration 'std::ostream& operator<<(std::ostream&, const Vector<T>&)' declares a non-template function [-Wnon-template-friend]
friend std::ostream& operator<< (std::ostream&, Vector<T> const&);
^
2) ошибка: 'std::ostream Vector<T>::operator<<(std::ostream, const Vector<T>&)' must take exactly one argument
std::ostream Vector<T>::operator << (std::ostream output, Vector<T> const& v)
^
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2016, 20:19
Ответы с готовыми решениями:

перегрузка операторов ввода вывода в шаблонном классе
Здравствуйте, недавно начал изучать C++, так что не судите сильно за такой вопрос. Перегрузка...

Перегрузка операторов в шаблонном классе
Привет! У меня есть шаблонный класс содержащий массив и его размер: Vector.h #pragma once...

Перегрузка операторов из дружеской функции в шаблонном классе
Скомпилировал http://dmtsoft.ru/bn/370/as/oneaticleshablon/. Как только перенёс в свой шаблонный...

Перегрузка операторов I/O в шаблонном классе
Добрый день. Создать шаблонный класс для работы с множествами. Максимальное количество элементов...

6
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
23.09.2016, 20:30 2
Амперсанд в 9-й строке где?
0
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 21
23.09.2016, 20:44  [ТС] 3
Поставил, но ничего не изменилось
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
23.09.2016, 20:55 4
C++
1
std::ostream & operator << (std::ostream os, Vector<T> & v)
0
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 21
23.09.2016, 21:17  [ТС] 5
Да-да, это тоже, но сути не меняет
0
Эксперт С++
3207 / 1734 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
23.09.2016, 21:54 6
Цитата Сообщение от nmcf Посмотреть сообщение
Амперсанд в 9-й строке где?
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
std::ostream & operator << (std::ostream os, Vector<T> & v)
А в параметре где?

Добавлено через 27 секунд
0
15140 / 8133 / 1966
Регистрация: 30.01.2014
Сообщений: 13,832
23.09.2016, 22:06 7
Цитата Сообщение от sm4ll_3gg Посмотреть сообщение
почему ф-я должна быть дружественной
Только если ей нужен доступ к приватным данным. Если такой доступ не нужен (например, достаточно публичных функций класса, для получения нужных данных), то friend делать не обязательно.

По поводу главного вопроса, можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T>
class Vector
{
 
    // Это можно вообще из класса убрать, если дружественность не нужна.
    template <typename U>
    friend std::ostream & operator<<(std::ostream & os, Vector<U> & v);
};
 
template<typename T>
std::ostream & operator<< (std::ostream & os, Vector<T> & v)
{
    //....
    return os;
}
Либо так:
C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
class Vector
{
 
    friend std::ostream & operator<<(std::ostream & os, Vector & v)
    {
        //.....
        return os;
    }
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2016, 22:06

Перегрузка дружественного оператора вывода в шаблонном классе
Здравствуйте! Я не могу понять как мне правильно сделать перегрузку оператора вывода ввывода в...

Перегрузка операторов ввода и вывода
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class ComplexNumber { private:...

Перегрузка операторов ввода/вывода.
Класс комплексных чисел. Нужно чтобы программа выводила и вводила в таком виде (функции in и out):...

Перегрузка операторов ввода/вывода
Вроде сделал, но не работает перегрузка оператора ввода. #include &quot;stdafx.h&quot; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.