Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка operator<< и шаблоны, При перегрузке оператора ошибка, не знаю 
:(
    Опции темы
S3_
Дата 23.9.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.10.2007

Репутация: нет
Всего: нет



Есть небольшая программа, реализующая односвязный список, вот вкратце код:

Код

#include <iostream>
#include <conio.h>

using namespace std;

template <class T>           // один элемент списка
struct term
{
    term(): data(NULL), next(NULL) {}
    term(T d, term<T>* n = NULL): data(d), next(n) {}
    void print() { cout<<data<<"\t"; }
    term<T>* next;
    T data;
};

template <class T>
class list              //наш класс
{
public:
    list(): h(NULL) {}             //по умолчанию
    list(list<T>& ls);               //копирующий
    list(T a[], int n);
    void add (term<T>* t);
    void print();
    list<T>& operator=(list<T>& ls);
    T operator[] (int i);
    friend ostream& operator<< (ostream& out, list<T> ls);        //вывод
private:
    void reverse();
    void clear();
    term<T>* h;
};
 // тут реализация всех конструкторов, деструкторов и тд. и тп.

template <class T>
ostream& operator<< (ostream& out, list<T> ls)       //неправильно почемуто (((
{
/*   
       term<T>* temp;
    temp = ls.h;
    while (temp)
    {
        out<<temp->data;
        temp = temp->next;
    }
*/
    return *this;
}

void main()
{
    double a[5] = {1.7,2.3,3.4,4.5,5.7};
    double b[7] = {7.0,6.4,5.5,4.6,3.7,2.8,1.3};
    list<double> A(a, 5);
    
    cout<<A;             //вот сдесь ошипка
    getch();
}


Ошибка такого содержания:

Цитата

TemplateList error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class list<double>)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@V?$list@N@@@Z) referenced in function _main


Как перегрузить вывод с шаблонами???
Заранее спасибо smile
PM MAIL   Вверх
GoldFinch
Дата 23.9.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Код

template <class T>
ostream& operator<< (ostream& out, list<T> ls)       //неправильно почемуто (((
{
    return *this;
}

вот тут должна быть ошибка компиляции, потому что this тут неуместен
PM MAIL ICQ   Вверх
bsa
Дата 23.9.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
template <class T>
ostream& operator<<(ostream& out, const list<T> &ls)       //неправильно почемуто (((
{
/*       term<T>* temp;
    temp = ls.h;
    while (temp)
    {
        out<<temp->data;
        temp = temp->next;
    }
*/
    return out;


Код
    list(list<T>& ls);               //копирующий
Это не копирующий. Он записывается так:
Код
    list(const list<T>& ls);               //копирующий

PM   Вверх
zim22
Дата 24.9.2009, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(bsa @  23.9.2009,  23:19 Найти цитируемый пост)
Это не копирующий. Он записывается так:

копирующий.  const писать не обязательно.
Цитата

Standard 2003/12.1
10. A copy constructor for a class X is a constructor with a first parameter of type X& or of type const  X&.
[Note: see 12.8 for more information on copy constructors.  ]




--------------------
PM MAIL   Вверх
S3_
Дата 24.9.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.10.2007

Репутация: нет
Всего: нет



Код

return out; 

тоже ставил, все равно таже ошибка (((

Это сообщение отредактировал(а) S3_ - 24.9.2009, 16:52
PM MAIL   Вверх
zim22
Дата 24.9.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



friend ostream& operator<< <T>(ostream& out, list<T> ls);        //вывод


--------------------
PM MAIL   Вверх
S3_
Дата 24.9.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.10.2007

Репутация: нет
Всего: нет



Цитата(zim22 @  24.9.2009,  17:17 Найти цитируемый пост)
friend ostream& operator<< <T>(ostream& out, list<T> ls);        //вывод 


Ааааа... Спасибо, работает smile)) Только чтото он выводит лажу ))) Ладно, это уже другая проблема )))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.