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

Перегрузка << в шаблоне класса List - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заданы символьные файлы f и g http://www.cyberforum.ru/cpp-beginners/thread985163.html
Заданы символьные файлы f и g. Определить, совпадают компоненты файла f с компонентами файла g. Если нет, то получить номер первого компонента, в котором f и g отличаются. В случае, когда один из...
C++ Сделать цикл где начальное, конечное значение и шаг вводятся с клавиатуры Условие(смотри вложение) Необходимо составить цикл с постусловием где начальное и конечное значение, а так же шаг вводятся с клавиатуры вот код: #include <stdio.h> #include <conio.h> #include... http://www.cyberforum.ru/cpp-beginners/thread985157.html
работа символьными файлами, незнаю как сделать C++
Задані символьні файли f i g. Визначити, чи збігаються компоненти файлу f з компонентами файлу g. Якщо ні, то одержати номер першого компонента, у якому f i g відрізняються між собою. У випадку, коли...
Массив: Найти наименьший элемент матрицы X и записать нули в ту строку и столбец, где он находится. C++
Есть задача: Найти наименьший элемент матрицы X (mxn) и записать нули в ту строку и столбец, где он находится. Нужно написать коды программы : 1. с использованием указателей 2. без использования...
C++ Сортировка слов http://www.cyberforum.ru/cpp-beginners/thread985140.html
Привет. Объясните пожалуйста код, немогу с ним разобраться(знаю что программа принимает строку выводит ее на экран и считает сумму наврное) #include<stdio.h> #include<string.h> void main() { ...
C++ Какие SQL запросы нужны для того, чтобы можно было отображать материал базы данных в комбоксе. Помогите пожалуйста, какие SQL запросы нужны для того чтобы можно было отображать материал базы данных в комбоксе. если можно сделайте простейший исходник и закинуть его мне где есть код... подробнее

Показать сообщение отдельно
gizmos
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 6

Перегрузка << в шаблоне класса List - C++

22.10.2013, 23:12. Просмотров 398. Ответов 2
Метки (Все метки)

Сап. Написал класс, реализующий работу односвязного списка. Для вывода решил использовать перегрузку << , но тут и начались проблемы (код программы и описание ошибки ниже (компилирую в Dev-C++)).
Хедер:
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
//хедер с объявлением класса "список" и структуры "узел списка"
#ifndef LIST_H
#define LIST_H
 
#include <iostream>
 
template <class v_type>
class List { 
    template <class u_type>
    friend std::ostream &operator<< (std::ostream &, const List<u_type> &); 
    
    public:
        List()  {head = 0; size = 0;}
        List(v_type);
        ~List();
        void Insert(v_type); 
        bool Destroy(v_type);
        int GetSize() const;
        v_type &operator[](int);
    private:
        struct Node {
            v_type data;
            Node *next;
        };
        int size;
        Node *head;
};
 
#endif
Соурс файл:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "list.h"
#include <assert.h>
#include <iostream>
 
using namespace std;
 
template <class v_type>
List<v_type>::List(v_type value)
{
    head = new Node;
    assert(head != 0);
    head->data = value;
    head->next = 0;
    size = 1;
}
 
template <class v_type>
List<v_type>::~List()
{
    Node *curr = head, *prev = 0, *temp = 0, *temp1 = 0;
    while (curr->next != 0)
    {
        prev = curr;
        curr = curr->next;
    }
    if (size > 1)
    {
        for (int i = 1; i <= size-1; i++)
        {
            temp = curr;
            prev->next = curr->next;
            delete temp;
            curr = head;
            prev = 0;
            while (curr->next != 0)
            {
                prev = curr;
                curr = curr->next;
            }
        }
        temp1 = head;
        head = head->next;
        delete temp1;
        size = 0;
    }
    else
        if (size = 1)
        {
            temp1 = head;
            head = head->next;
            delete temp1;
        }
}
 
template <class v_type>
void List<v_type>::Insert(v_type value)
{
    Node *elem, *prev = 0, *curr = head;
    elem = new Node;
    if (elem != 0)
    {
        elem->data = value;
        elem->next = 0;
        while (curr != 0 && value < curr->data)
        {
            prev = curr;
            curr = curr->next;
        }
        if (prev == 0)
        {
            elem->next = head;
            head = elem;
            ++size; 
        }
        else
        {
            prev->next = elem;
            elem->next = curr; 
            ++size; 
        }
    }
    else
        cout << value << " not inserted. No memory available. \n";
}
 
template <class v_type>
bool List<v_type>::Destroy(v_type value)
{
    Node *curr, *prev, *temp;
    if (value == head->data)
    {
        temp = head;
        head = head->next;
        delete temp; 
        --size;
        return true;
    }
    else
    {
        prev = head;
        curr = head->next;
        while (curr != 0 && curr->data != value)
        {
            prev = curr;
            curr = curr->next;
        }
        if (curr != 0)
        {
            temp = curr;
            prev->next = curr->next;
            delete temp;
            --size; 
            return true;
        }
        else
            return false;
    }
}
 
template <class v_type>
ostream &operator<<(ostream &out, const List<v_type> &ls)
{
    for (List<v_type>::Node *node = ls.head; node != 0; node = node->next)  //здесь ошибка
        out << node->data << " ";
    out << endl;
    return out;
}
 
template <class v_type>
v_type &List<v_type>::operator[](int elemNum)
{
    Node *curr = head;
    for (int i = 0; i < elemNum; i++)
        curr = curr->next;
    return curr->data;
}
 
template <class v_type>
int List<v_type>::GetSize() const   {return size;}
выдает ошибку:
123 27 D:\ó÷åáà\C\C++\List\list.cpp [Error] 'node' was not declared in this scope
Второй день уже мучаюсь. Всем заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru