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

Ошибка в реализации связного списка - C++

Восстановить пароль Регистрация
 
Anikin
3 / 3 / 3
Регистрация: 20.06.2016
Сообщений: 28
Завершенные тесты: 1
11.07.2016, 23:31     Ошибка в реализации связного списка #1
Здравствуйте. Делаю заголовочный файл связного списка. В результате компиляции выдает ошибку: "List is not a class template". Не понимаю в чем ошибка, ведь класс List шаблонный.
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#ifndef LIST_H
#define LIST_H
#include <iostream>
#include <assert.h>
 
using namespace std;
 
//ГЄГ«Г*Г±Г± óçåë Г±ГЇГЁГ±ГЄГ*
template <class NODETYPE>
class ListNode {
    friend class List<NODETYPE>;    //îáúÿâëåГ*ГЁГҐ List äðóæåñòâåГ*Г*ûì ГЄГ«Г*ññîì
    
public:
    ListNode(const NODETYPE& );     //ГЄГ®Г*ñòðóêòîð
    NODETYPE getData() const;       //âîçâðГ*Г№Г*ГҐГІ Г¤Г*Г*Г*ûå óçëГ*
private:
    NODETYPE data;                  //Г¤Г*Г*Г*ûå
    ListNode* nextPtr;              //ñëåäóþùèé óçåë Гў Г±ГЇГЁГ±ГЄГҐ
};
 
//ГЄГ®Г*ñòðóêòîð
template<class NODETYPE>
ListNode<NODETYPE>::ListNode(const NODETYPE& info)
{
    data = info;
    nextPtr = 0;
}
 
//âîçðГ*Г№ГҐГ*ГЁГҐ Г¤Г*Г*Г*ûõ óçëГ*
template<class NODETYPE>
NODETYPE ListNode<NODETYPE>::getData() const { return data; }
 
//ГЄГ«Г*Г±Г± ñïèñîê
template <class NODETYPE>
class List {
public:
    List();         //ГЄГ®Г*ñòðóêòîð
    ~List();        //äåñòðóêòîð
    void insertAtFront(const NODETYPE&);
    void insertAtBack(const NODETYPE&);
    int removeFromFront(NODETYPE&);
    int removeFromBack(NODETYPE&);
    int isEmpty() const;
    void print() const;
private:
    ListNode<NODETYPE>* firstPtr;                   //ГіГЄГ*Г§Г*òåëü Г*Г* Г*Г*Г·Г*ëî Г±ГЇГЁГ±ГЄГ*
    ListNode<NODETYPE>* lastPtr;                    //ГіГЄГ*Г§Г*òåëü Г*Г* ГЄГ®Г*ГҐГ¶
    ListNode<NODETYPE>* getNewNode(const NODETYPE&);    //óòèëèòГ*
};
 
//ГЄГ®Г*ñòðóêòîð Г± óìîë÷Г*Г*ГЁГҐГ¬
template <class NODETYPE> 
List<NODETYPE>::List() { firstPtr = lastPtr = 0;}
 
//äåñòðóêòîð
template <class NODETYPE>
List<NODETYPE>::~List()
{
    if(! isEmpty() ) 
    {       //ñïèñîê Г*ГҐ ïóñòîé
    cout << "ÓäГ*ëåГ*ГЁГҐ óçëîâ...\n";
    
    ListNode<NODETYPE> *currentPtr = firstPtr, *tempPtr;
    
    while (currentPtr != 0) 
        {
        tempPtr = currentPtr;
        cout << tempPtr->data << endl;
        currentPtr = currentPtr->nextPtr;
        delete tempPtr;
        } 
    
    }
 
    cout << "Âñå óçëû ГіГ¤Г*ëåГ*Г»" << endl << endl;
}
 
//äîáГ*ГўГЁГІГј óçåë Гў Г*Г*Г·Г*ëî
template <class NODETYPE>
void List<NODETYPE>::insertAtFront(const NODETYPE& value) 
{
    ListNode<NODETYPE> *newPtr = getNewNode(value);
    
    if (isEmpty())
    firstPtr = lastPtr = newPtr;
    else 
    {
    newPtr->nextPtr = firstPtr;
    firstPtr = lastPtr;
    }
 
}
    
//äîáГ*ГўГЁГІГј óçåë Гў ГЄГ®Г*ГҐГ¶
template <class NODETYPE>
void List<NODETYPE>::insertAtBack(const NODETYPE& value) 
{
    ListNode<NODETYPE> *newPtr = getNewNode(value);
    
    if (isEmpty())
    firstPtr = lastPtr = newPtr;
    else 
    {
    lastPtr->nextPtr = newPtr;
    lastPtr = newPtr;
    }
}
//ГіГ¤Г*ëèòü óçåë Г± Г*Г*Г·Г*Г«Г*
template <class NODETYPE>
int List<NODETYPE>::removeFromFront(NODETYPE& value)
{
    if (isEmpty())      //Г*ГҐГіГ¤Г*Г·Г*îå ГіГ¤Г*ëåГ*ГЁГҐ
    return 0;
    else {
    
        ListNode<NODETYPE>* tempPtr = firstPtr;
        if (firstPtr == lastPtr)
        firstPtr = lastPtr = 0;
        else 
        firstPtr = firstPtr->nextPtr;
        
    value = tempPtr->data;
    delete tempPtr;
    
    return 1;       //ГіГ±ГЇГҐГёГ*îå ГіГ¤Г*ëåГ*ГЁГҐ
    }
}
 
//ГіГ¤Г*ëèòü óçåë Г± ГЄГ®Г*Г¶Г*
template <class NODETYPE>
int List<NODETYPE>::removeFromBack(NODETYPE& value)
{
    if (isEmpty())      //Г*ГҐГіГ¤Г*Г·Г*îå ГіГ¤Г*ëåГ*ГЁГҐ
    return 0;
    else {
    
        ListNode<NODETYPE>* tempPtr = firstPtr;
        if (firstPtr == lastPtr)
        firstPtr = lastPtr = 0;
        else {
        ListNode<NODETYPE>* currentPtr = firstPtr;
        
        while(currentPtr->nextPtr != lastPtr)
        currentPtr = currentPtr->nextPtr;
        
        lastPtr = currentPtr;
        currentPtr->nextPtr = 0;
        }
    value = tempPtr->data;
    delete tempPtr;
    
    return 1;       //ГіГ±ГЇГҐГёГ*îå ГіГ¤Г*ëåГ*ГЁГҐ
    }
 
}
 
//ïóñòîé ëè ñïèñîê 1 - ïóñòîé 0 - Г*ГҐГІ
template <class NODETYPE>
int List<NODETYPE>::isEmpty() const { return firstPtr == 0; }
 
//âîçâðГ*Г№ГҐГ*ГЁГҐ ГіГЄГ*Г§Г*òåëÿ Г*Г* áëèæГ*éøèé óçåë
template <class NODETYPE> 
ListNode<NODETYPE>* List<NODETYPE>::getNewNode(const NODETYPE& value)
{
    ListNode<NODETYPE>* ptr = new ListNode<NODETYPE>(value);
 
    assert(ptr != 0);
    return ptr;
}
 
//print
template <class NODETYPE>
void List<NODETYPE>::print() const 
{
    if (isEmpty() ) {
    cout << "Ñïèñîê ГЇГіГ±ГІ\n\n";
    return;
    }
    
    ListNode<NODETYPE>* currentPtr = firstPtr;
    cout << "Ñïèñîê ñîñòîèò ГЁГ§: ";
    
    while(currentPtr != 0) {
    cout << currentPtr->data << ' ';
    currentPtr = currentPtr->nextPtr;
    } 
    cout << endl << endl;
    
}
#endif
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2016, 23:31     Ошибка в реализации связного списка
Посмотрите здесь:

Ошибка в Классе связного списка C++
обращение к члену связного списка C++
Сортировка связного списка C++
C++ сортировка связного списка
C++ Реализация связного списка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
creator_it
1 / 1 / 0
Регистрация: 20.11.2014
Сообщений: 17
12.07.2016, 00:16     Ошибка в реализации связного списка #2
11 строка, я так понимаю вы не дописали Mode

Добавлено через 2 минуты
на какую строку указывает компилятор?
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 2
12.07.2016, 00:19     Ошибка в реализации связного списка #3
Цитата Сообщение от Anikin Посмотреть сообщение
friend class List<NODETYPE>;
У вас перед "упоминаем" класса нету его определения. Если класс List<NODETYPE> действительно реализован, то перед

C++
1
template <class NODETYPE>
поставьте

C++
1
2
template <class NODETYPE>
class List<NODETYPE>;
Anikin
3 / 3 / 3
Регистрация: 20.06.2016
Сообщений: 28
Завершенные тесты: 1
12.07.2016, 00:57  [ТС]     Ошибка в реализации связного списка #4
В каком именно месте?
Напишите, пожалуйста, строку целиком.
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 2
12.07.2016, 01:04     Ошибка в реализации связного списка #5
Anikin,

C++
1
2
3
4
5
6
7
8
using namespace std;
 
template <class NODETYPE>
class List<NODETYPE>;
 
//ГЄГ«Г*Г±Г± óçåë Г±ГЇГЁГ±ГЄГ*
template <class NODETYPE>
class ListNode ...
Anikin
3 / 3 / 3
Регистрация: 20.06.2016
Сообщений: 28
Завершенные тесты: 1
12.07.2016, 01:10  [ТС]     Ошибка в реализации связного списка #6
Не помогло, теперь выдает ошибку на 4 строке вашего кода.
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 2
12.07.2016, 01:30     Ошибка в реализации связного списка #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Anikin, действительно. Тогда я пока затрудняюсь ответить. Если вам надо срочно, то предлагаю сделать класс ListNode вложенным.

Добавлено через 3 минуты
Anikin, ой, глупая ошибка... Сделайте так

C++
1
2
3
4
5
6
7
8
using namespace std;
 
template <typename NODETYPE>
class List;
 
//ГЄГ«Г*Г±Г± óçåë Г±ГЇГЁГ±ГЄГ*
template <class NODETYPE>
class ListNode ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2016, 01:32     Ошибка в реализации связного списка
Еще ссылки по теме:

Удаление элементов из связного списка C++
C++ Ошибка при реализации move конструктора для списка
C++ Вывод связного списка в файл

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

Или воспользуйтесь поиском по форуму:
Anikin
3 / 3 / 3
Регистрация: 20.06.2016
Сообщений: 28
Завершенные тесты: 1
12.07.2016, 01:32  [ТС]     Ошибка в реализации связного списка #8
Спасибо за помощь!
Yandex
Объявления
12.07.2016, 01:32     Ошибка в реализации связного списка
Ответ Создать тему

Метки
класс, связный список, шаблоны
Опции темы

Текущее время: 09:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru