Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
#1

Как потоковую функцию в шаблоне класса сделать неинлайновой - C++

26.05.2012, 13:00. Просмотров 325. Ответов 2
Метки нет (Все метки)

Если потоковую функцию описать внутри класса,
то все компилируется и собирается. Но если вынести ее код наружу,
то функция не находится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 template<class T> 
class A
{
protected:
    T x,y;
public:
    A():x(0),y(0){}
    //friend istream& operator>>(istream& is,A<T> &a);
    //friend ostream& operator<<(ostream& is,A<T> &a);
    friend istream& operator>>(istream& is,A<T> &a){is>>a.x>>a.y;return is;}
    friend ostream& operator<<(ostream& is,A<T> &a){is<<a.x<<' '<<a.y<<endl;return is;}
};
//template<class T> 
//istream& operator>>(istream& is,A<T> &a){is>>a.x>>a.y;return is;}
//template<class T> 
//ostream& operator<<(ostream& is,A<T> &a){is<<a.x<<' '<<a.y<<endl;return is;}
int main()
{
    A<int> a;
    cin>>a;cout<<a;
    system("pause");
    return 0;
}
Чо бы это значило?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 13:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как потоковую функцию в шаблоне класса сделать неинлайновой (C++):

Как описывать функции, заданные в шаблоне класса, тип возвращаемого значения которых совпадает с именем класса - C++
Здравствуйте. А как описывать функции, заданные в шаблоне класса, тип возвращаемого значения которых совпадает с именем класса? Более...

Как обраиться к функции класса через другую функцию класса (друга)? - C++
Пример кода: #include &lt;iostream&gt; using namespace std; class Sasha; class Petya { public: friend class Sasha; ...

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? - C++
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и вызывается в его конструкторе (камень...

как мне функцию одного класса в функцию базового вставить - C++
как мне функцию одного класса в функцию базового вставить??чет не хера не получается.... class Car { public : void...

Как сделать, чтобы функция класса могла работать с обьектами другого класса - C++
есть класс к примеру class One и класс к примеру class Two нужно чтобы элемент функция класса One могла работать в обьектами класа...

Как сделать членом класса экземпляр этого же класса - C++
class Operation { public: bool type; //true = operation, false = number char Operator; Operation L_Op; Operation R_Op; ...

2
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,468
Записей в блоге: 2
26.05.2012, 13:31 #2
В вашем случае потоковая функция не является шаблонной, а реализовать ее вы пытаетесь как шаблонную. Выглядеть должно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
 
using namespace std;
 
template<class T> class A
{
protected:
    T x,y;
public:
    A():x(0),y(0){}
    friend istream& operator>><T>(istream& is,A<T> &a);
    friend ostream& operator<<<T>(ostream& is,A<T> &a);
};
 
template<class T> istream& operator>>(istream& is,A<T> &a)
{
    is>>a.x>>a.y;
    return is;
}
 
template<class T> ostream& operator<<(ostream& is,A<T> &a)
{
    is<<a.x<<' '<<a.y<<endl;
    return is;
}
int main()
{
    A<int> a;
    cin>>a;
    cout<<a;
    system("pause");
    return 0;
}
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
26.05.2012, 13:38 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
template <class T>
class A
{
protected:
    T x, y;
public:
    A(const T &_x = T(), const T &_y = T());
 
    template <class N>
    friend std::ostream &operator << (std::ostream &os,
                                      const A<N> &rhs);
};
 
template <class T>
A<T>::A(const T &_x, const T &_y)
    : x(_x), y(_y)
{
}
 
template <class T>
std::ostream &operator << (std::ostream &os,
                           const A<T> &rhs)
{
    return os << rhs.x << " " << rhs.y;
}
 
int main()
{
    A<int> a;
    std::cout << a << std::endl;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 13:38
Привет! Вот еще темы с ответами:

Структура в шаблоне класса - C++
Есть у меня класс бинарного поискового дерева. В нем описана структура TreeNode элемента дерева. template &lt;typename T= int&gt; class...

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать? - C++
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при объявлении инициализировать нельзя. Можно конструктором при...

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

Вызов функции в шаблоне класса - C++
Выполняю,через шаблоны класса. Вообщем,в меню не могу вызвать функции. Скажите,все ли правильно в вызове функций? вот файл .h ...


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

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

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