0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
1

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

24.01.2016, 23:13. Показов 2233. Ответов 21
Метки нет (Все метки)

Пишу шаблон класса двусвязного списка. Всё в хедере. В классе присутствует структура item. Пытаюсь написать метод, возвращающий указатель на тип item, однако компилятор выдает ошибку "C2061 синтаксическая ошибка: идентификатор "item" " Строка 58
Что тут неправильно?

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
template <typename T>
class DoubleList
{
public:
    struct item 
    {
        T value;
        item *pPrew;
        item *pNext;
        item(T value);
    };
private:
    int size;
    item *pHead;
    item *pTail;
public:
    DoubleList();
    ~DoubleList();
    int get_size();
    item* begin();
    item* end();
    item* step(item*);
    void add(T);
    void addHead(T);
    void clear();
    int find_all(T);
    item* find_fist(T);
    int find_last(T);
    void insert(int, T);
    void remove_at(int);
    void remove_fist(T);
    void reverse();
    void show();
};
 
template <typename T>
DoubleList<T>::DoubleList(){
    size = 0;
    pHead = pTail = NULL;
}
 
template <typename T>
DoubleList<T>::~DoubleList(){
    item *pTemp = pHead;
    while (pHead) {
        pTemp = pTemp->pNext;
        delete pHead;
        pHead = pTemp;
    }
}
 
template <typename T>
int DoubleList<T>::get_size(){
    return size;
}
 
template <typename T>
DoubleList<T>::item* DoubleList<T>::begin() {
    return pHead;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2016, 23:13
Ответы с готовыми решениями:

Даны числа D1 и D2 и указатель P0 на один из элементов непустого двусвязного списка. Добавить в начало списка новый
Даны числа D1 и D2 и указатель P0 на один из элементов непустого двусвязного списка. Добавить в...

Шаблон двусвязного списка
Написала такую программу реализации двусвязного списка.Когда перерабатывала под шаблон,выдает...

Создать для класса виртуальный метод, возвращающий уникальный идентификатор класса
В курсаче по ООП сказано создать для класса виртуальный метод,возвращающий уникальный идентификатор...

Элемент двусвязного списка содержит указатель на строку. Вставить строку в конец списка
Элемент двусвязного списка содержит указатель на строку. Вставить строку в конец списка. В список...

21
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
24.01.2016, 23:18 2
Via_Tor,
C++
1
typename DoubleList<T>::item* DoubleList<T>::begin() {...}
Таковы правила.
2
Don't worry, be happy
17779 / 10543 / 2035
Регистрация: 27.09.2012
Сообщений: 26,514
Записей в блоге: 1
24.01.2016, 23:19 3
DoubleList<T>::item зависимое имя, поэтому необходимо добавить typename:
C++
1
2
3
4
template <typename T>
typename DoubleList<T>::item* DoubleList<T>::begin() {
    return pHead;
}
2
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
24.01.2016, 23:25  [ТС] 4
Благодарю
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 45
24.01.2016, 23:30 5
Объясните пожалуйста почему не так?
C++
1
2
3
template <typename T>
item* DoubleList<T>::begin ()
{ /*...*/}
0
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
24.01.2016, 23:44 6
_Bes_, Потому что item находитсяя в пространстве имён DoubleList<T>
0
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 45
24.01.2016, 23:58 7
непонятно... пространство имен вроде namespace....
C++
1
2
3
4
5
6
7
template <typename T>                  // шаблон
item* DoubleList<T>::begin ()          // определение метода вне класса
 
// возвращаемое значение (item*), DoubleList<T> - относится к этому классу (T - аргумент шаблона), begin () - метод
//  
 
{ /*...*/}
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 00:04  [ТС] 8
Ехаю дальше. Класс, содержащий структуру WordItem.
В хедере:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include <iostream>
#include <string>
#include "DoubleList.h"
using namespace std;
 
class Dictionary
{
public:
    struct WordItem
    {
        string word;
        int count;
        WordItem();
        WordItem(string);
        WordItem& operator = (const WordItem &obj);
        bool operator == (WordItem& obj);
    };
private:
    DoubleList<WordItem> Dict;
В СРР-шке:

C++
1
2
3
4
Dictionary::WordItem::WordItem(string word){
    this->word = word;
    count = 1;
}
Компилятор выдает ошибку: "C3083 WordItem: символ слева от "::" должен представлять тип ", строка 1
Не могу понять, как исправить.
0
Don't worry, be happy
17779 / 10543 / 2035
Регистрация: 27.09.2012
Сообщений: 26,514
Записей в блоге: 1
25.01.2016, 00:08 9
Цитата Сообщение от Via_Tor Посмотреть сообщение
Не могу понять, как исправить.
А }; после объявления Dictionary есть(проверьте)?
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 00:14  [ТС] 10
_Bes_, структура item относится к классу DoubleList. Это нужно указывать в заголовке.

Добавлено через 54 секунды
Croessmah, есть. Да и у меня эти скобки автоматом прописываются (VS 15).
0
Don't worry, be happy
17779 / 10543 / 2035
Регистрация: 27.09.2012
Сообщений: 26,514
Записей в блоге: 1
25.01.2016, 00:16 11
Via_Tor, проверил: http://rextester.com/PRZI47071
компилируется
Цитата Сообщение от Via_Tor Посмотреть сообщение
Компилятор выдает ошибку: "C3083 WordItem: символ слева от "::" должен представлять тип ", строка 1
строка 1?
А у Вас в cpp больше ничего нет?
А где
C++
1
#include "dictionary.h"
или как там у Вас хедер называется.
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 00:20  [ТС] 12
Croessmah, есть, просто сырой совсем еще, да и это первая ошибка в нем. А вообще, как-то так:

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
#include "Dictionary.h"
using namespace std;
 
Dictionary::WordItem::WordItem(){
    this->word = "";
    count = 0;
}
 
Dictionary::WordItem::WordItem(string word){
    this->word = word;
    count = 1;
}
 
Dictionary::WordItem & Dictionary::WordItem::operator=(const WordItem & obj){
    word = obj.word;
    count = obj.count;
    return *this;
}
 
bool Dictionary::WordItem::operator==(WordItem & obj){
    if (word == obj.word)
        return true;
    else
        return false;
}
 
void Dictionary::add(string word){
    WordItem wrd(word);
    if (Dict.find_fist(wrd)) {
        DoubleList<WordItem>::item *it = Dict.find_fist(wrd);
        it->value.count++;
    }
    else {
        Dict.add(wrd);
    }
}
 
void Dictionary::show(){
    if (Dict.get_size()) {
        DoubleList<WordItem>::item *pTemp = Dict.begin();
        while (pTemp) {
            cout << endl << pTemp->value.word 
                << " (" << pTemp->value.count << ")";
            pTemp = pTemp->pNext;
        }
    }
}
0
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
25.01.2016, 00:23 13
Цитата Сообщение от _Bes_ Посмотреть сообщение
непонятно... пространство имен вроде namespace....
В С++ много пространств имён - каждый класс - своё пространство, функция - своё, неименнованные также бывают.
C++
1
2
3
4
5
6
7
8
int main()
{
     int foo;
     {// тоже пространство имён.
 
          int bar;
     }
}
Цитата Сообщение от Via_Tor Посмотреть сообщение
using namespace std;
В хедере? убрать или на костёр, выбирайте (везде где будет включён хедер вы в глобальное пространство включаете std - в вашем случае и std проблем нет, а вообще - на костёр вас отправят, поэтому убрать)

Цитата Сообщение от Via_Tor Посмотреть сообщение
Компилятор выдает ошибку: "C3083 WordItem: символ слева от "::" должен представлять тип "
Вроде всё должно быть нормально, но попробуйте вынести WordItem из Dictionary. Вложенные классы, это инструмент, и его не надо юзать везде.
И да здравствует мыло душистое :
https://msdn.microsoft.com/ru-... h0937.aspx
Функции-члены, объявленные во вложенных классах, могут быть определены в области файла.
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 00:28  [ТС] 14
Цитата Сообщение от Nosey Посмотреть сообщение
В хедере? убрать или на костёр
Убрал из хедера using namespace std; — СРР-шка вся в момент покраснела. Вставил обратно — всё норм.
0
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
25.01.2016, 00:33 15
Цитата Сообщение от Via_Tor Посмотреть сообщение
Убрал из хедера using namespace std; — СРР-шка вся в момент покраснела. Вставил обратно — всё норм.
Ну так положите её в cpp.
И непосредственно в функции в хедере, если лень std:: набрать.

Вынесите WordItem из Dictionary.
Правда ли студия запрещает определять методы вложенного класса в cpp?
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 00:52  [ТС] 16
Nosey, убрал из хедера using namespace std; , вынес структуру за класс:

C++
1
2
3
4
5
6
7
8
9
10
11
struct WordItem
{
    string word;
    int count;
    WordItem();
    WordItem(string);
    WordItem& operator = (const WordItem &obj);
    bool operator == (WordItem& obj);
};
class Dictionary
{
В срр подправил определение:

C++
1
2
3
4
WordItem::WordItem(){
    this->word = "";
    count = 0;
}
Теперь в этом же месте выдает ошибку " C2653 WordItem: не является именем класса или пространства имен "
0
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
25.01.2016, 00:56 17
Via_Tor, Приведите полный код хедера и срр файлов.

И скорее всего я зря вас попросил попросил вынести WordItem, т.е. зря бочку катил на Студию, хотя проверить не имею возможности - это для читающих поколений.
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 01:04  [ТС] 18
Nosey,

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
//Dictionary.h
 
#pragma once
#include <iostream>
#include <string>
#include "DoubleList.h"
 
 
 struct WordItem
{
    string word;
    int count;
    WordItem();
    WordItem(string);
    WordItem& operator = (const WordItem &obj);
    bool operator == (WordItem& obj);
};
 
class Dictionary
{
    DoubleList <WordItem> Dict;
public:
    void add(string);
    void readFile(string);
    void show();
    void writeFile(string);
};
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
//Dictionary.cpp
 
#include "Dictionary.h"
using namespace std;
 
WordItem::WordItem(){
    this->word = "";
    count = 0;
}
 
WordItem::WordItem(string word){
    this->word = word;
    count = 1;
}
 
WordItem & WordItem::operator=(const WordItem & obj){
    word = obj.word;
    count = obj.count;
    return *this;
}
 
bool WordItem::operator==(WordItem & obj){
    if (word == obj.word)
        return true;
    else
        return false;
}
 
void Dictionary::add(string word){
    WordItem wrd(word);
    if (Dict.find_fist(wrd)) {
        DoubleList<WordItem>::item *it = Dict.find_fist(wrd);
        it->value.count++;
    }
    else {
        Dict.add(wrd);
    }
}
 
void Dictionary::show(){
    if (Dict.get_size()) {
        DoubleList<WordItem>::item *pTemp = Dict.begin();
        while (pTemp) {
            cout << endl << pTemp->value.word 
                << " (" << pTemp->value.count << ")";
            pTemp = pTemp->pNext;
        }
    }
}
0
1378 / 405 / 144
Регистрация: 22.10.2014
Сообщений: 872
25.01.2016, 01:31 19
Via_Tor, Могу вас обрадовать, что код у вас верный Разве что в #include "DoubleList.h" присутствует using namespace std;
А по вопросу, если у вас только одна эта ошибка, то:
1) Найдите в менюшках сборки, очистку проекта(clean). - Очистить -> попробовать собрать.
2) Если не поможет, поищите в папке и подпапках проекта(которая на диске ) самый большой файл у него расширение будет что-то типа dataBase(это совсем из головы, но суть думаю вам ясна) и удалите его - это если очистка проекта его не убивает. -> попробовать пересобрать.

Добавлено через 10 минут
3) Если первые два не сработали - приложить сюда все ошибки, так как их выводит студия (ctrl+c -> ctrl+v и без скринов).
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 10
25.01.2016, 08:59  [ТС] 20
Nosey, к сожалению ничего не помогает. Да и вообще что-то непонятное происходит: подчеркиваются одни ошибки, переключаюсь с одного файла на другой и обратно — ошибки уже почти не подчеркнуты. То компилятор видит WordItem то реагирует как на неопределенное... Может еще завтра попробую тупо создать новый проект и скопипастить туда код.
В общем вот все файлы проекта:

DoubleList.h:
Кликните здесь для просмотра всего текста

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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
#pragma once
 
template <typename T>
class DoubleList
{
public:
    struct item 
    {
        T value;
        item *pPrew;
        item *pNext;
        item(T value);
    };
private:
    int size;
    item *pHead;
    item *pTail;
public:
    DoubleList();
    ~DoubleList();
    int get_size();
    item* begin();
    item* end();
    item* step(item*);
    void add(T);
    void addHead(T);
    void clear();
    int find_all(T);
    item* find_fist(T);
    item* find_last(T);
    void insert(int, T);
    void remove_at(int);
    void remove_fist(T);
    void reverse();
    void show();
};
 
template <typename T>
DoubleList<T>::DoubleList(){
    size = 0;
    pHead = pTail = NULL;
}
 
template <typename T>
DoubleList<T>::~DoubleList(){
    item *pTemp = pHead;
    while (pHead) {
        pTemp = pTemp->pNext;
        delete pHead;
        pHead = pTemp;
    }
}
 
template <typename T>
int DoubleList<T>::get_size(){
    return size;
}
 
template <typename T>
typename DoubleList<T>::item* DoubleList<T>::begin() {
    return pHead;
}
 
template <typename T>
typename DoubleList<T>::item* DoubleList<T>::end() {
    return pTail;
}
 
template <typename T>
typename DoubleList<T>::item* DoubleList<T>::step(item* ptr) {
    if (ptr->pNext)
        ptr = ptr->pNext;
    return ptr;
}
 
template <typename T>
void DoubleList<T>::add(T value){
    item *pNewItem = new item(value);
    if (pHead) {
        pTail->pNext = pNewItem;
        pNewItem->pPrew = pTail;
        pTail = pNewItem;
    }
    else 
        pHead = pTail = pNewItem;
    size++;
}
 
template <typename T>
void DoubleList<T>::addHead(T value){
    item *pNewItem = new item(value);
    if (pHead) {
        pNewItem->pNext = pHead;
        pHead->pPrew = pNewItem;
        pHead = pNewItem;
    }
    else
        pHead = pTail = pNewItem;
    size++;
}
 
template <typename T>
void DoubleList<T>::clear(){
    if (size) {
        item *pTemp;
        while (pHead != pTail) {
            pTemp = pHead;
            pHead = pTemp->pNext;
            delete pTemp;
        }
    }
        delete pHead;
        pHead = pTail = NULL;
        size = 0;
}
 
template <typename T>
int DoubleList<T>::find_all(T value){
    int counter = 0;
    item *pTemp = pHead;
    while (pTemp) {
        if (pTemp->value == value)
            counter++;
        pTemp = pTemp->pNext;
    }
    if (counter)
        return counter;
    else
        return 0;
}
 
template <typename T>
typename DoubleList<T>::item* DoubleList<T>::find_fist(T value){
    item *pTemp = pHead;
    while (pTemp) {
        if (pTemp->value == value)
            return pTemp;
        pTemp = pTemp->pNext;
    }
    return nullptr;
}
 
template <typename T>
typename DoubleList<T>::item* DoubleList<T>::find_last(T value){
    if (size) {
        item *pTemp = pTail;
        while (pTemp) {
            if (pTemp->value == value)
                return pTemp;
            pTemp = pTemp->pPrew;
            index--;
        }
        return nullptr;
    }
}
 
template <typename T>
void DoubleList<T>::insert(int index, T value){
    item *pNewItem = new item(value);
    if (index >= 0) {
        if (index <= size / 2) {
            if (!index) {
                pNewItem->pNext = pHead;
                pHead->pPrew = pNewItem;
                pHead = pNewItem;
            }
            else {
                item *pTemp = pHead;
                for (int i = 0; i < index - 1; i++) {
                    pTemp = pTemp->pNext;
                }
                pNewItem->pPrew = pTemp;
                pNewItem->pNext = pTemp->pNext;
                pTemp->pNext = pTemp->pNext->pPrew = pNewItem;
            }
        }
        else {                                      // index > size/2
            if (index >= size) {
                pNewItem->pPrew = pTail;
                pTail->pNext = pNewItem;
                pTail = pNewItem;
            }
            else {
                item *pTemp = pTail;
                for (int i = size - 1; i > index; i--)
                    pTemp = pTemp->pPrew;
                pNewItem->pPrew = pTemp->pPrew;
                pNewItem->pNext = pTemp;
                pTemp->pPrew = pTemp->pPrew->pNext = pNewItem;
            }
        }
        size++;
    }
    else
        cout << "\n Invalid index!\n\n";
}
 
template <typename T>
void DoubleList<T>::remove_at(int index){
    if (index >= 0 && index < size) {
        if (index <= size / 2) {
            item *pTemp = pHead;
            if (!index) {
                pHead = pTemp->pNext;
                pHead->pPrew = NULL;
                delete pTemp;
            }
            else {
                for (int i = 0; i < index - 1; i++)
                    pTemp = pTemp->pNext;
                item *Copy = pTemp->pNext->pNext;
                delete pTemp->pNext;
                pTemp->pNext = Copy;
                pTemp->pNext->pPrew = pTemp;
            }
        }
        else {                                  // index > size/2
            item *pTemp = pTail;
            if (index == size - 1) {
                pTail = pTemp->pPrew;
                pTail->pNext = NULL;
                delete pTemp;
            }
            else {
                for (int i = size - 1; i > index + 1; i--)
                    pTemp = pTemp->pPrew;
                item *Copy = pTemp->pPrew->pPrew;
                delete pTemp->pPrew;
                pTemp->pPrew = Copy;
                pTemp->pPrew->pNext = pTemp;
            }
        }
        size--;
    }
    else
        cout << "\n Invalid index!\n\n";
}
 
template <typename T>
void DoubleList<T>::remove_fist(T value){
    if (size) {
        item *pTemp = pHead;
        if (pHead->value == value) {
            pHead = pHead->pNext;
            if(pHead)
                pHead->pPrew = NULL;
            delete pTemp;
        }
        else {
            while (pTemp->pNext) {
                pTemp = pTemp->pNext;
                if (pTemp->value == value) {
                    if (pTemp == pTail) {          // delete last item
                        pTail = pTemp->pPrew;
                        pTail->pNext = NULL;
                        delete pTemp;
                        pTemp = pTail;
                    }
                    else {
                        pTemp->pPrew->pNext = pTemp->pNext;
                        pTemp->pNext->pPrew = pTemp->pPrew;
                        delete pTemp;
                        pTemp = pTail;
                    }
                }               
            }
        }
        size--;
    }
}
 
template <typename T>
void DoubleList<T>::reverse(){
    if (size >1) {
        item *pTemp = pHead;
        item *pTemp1;
        item *pChange;
        do {
            pTemp1 = pTemp->pNext;
            pChange = pTemp->pPrew;
            pTemp->pPrew = pTemp->pNext;
            pTemp->pNext = pChange;
            pTemp = pTemp1;
        } while (pTemp);
        pTemp = pHead;
        pHead = pTail;
        pTail = pTemp;
    }
}
 
template <typename T>
void DoubleList<T>::show(){
    item *pTemp = pHead;
    if (pHead) {
        while (pTemp) {
            cout << pTemp->value << ' ';
            pTemp = pTemp->pNext;
        }
    }
    else
        cout << "\n NULL";
}
 
template <typename T>
typename DoubleList<T>::item::item(T value){
    this->value = value;
    pPrew = pNext = NULL;
}


Dictionary.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#include <string>
#include "DoubleList.h"
 
struct WordItem
{
    std::string word;
    int count;
    WordItem();
    WordItem(std::string);
    WordItem& operator = (const WordItem &obj);
    bool operator == (WordItem& obj);
};
 
class Dictionary
{
    DoubleList <WordItem> Dict;
public:
    void add(std::string);
    void readFile(std::string);
    void show();
    void writeFile(std::string);
};


Dictionary.cpp

Кликните здесь для просмотра всего текста
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
#include<iostream>
#include "Dictionary.h"
using namespace std;
 
 
WordItem::WordItem(){
    this->word = "";
    count = 0;
}
 
WordItem::WordItem(string word){
    this->word = word;
    count = 1;
}
 
WordItem & WordItem::operator=(const WordItem & obj){
    word = obj.word;
    count = obj.count;
    return *this;
}
 
bool WordItem::operator==(WordItem & obj){
    if (word == obj.word)
        return true;
    else
        return false;
}
 
void Dictionary::add(string word){
    WordItem wrd(word);
    if (Dict.find_fist(wrd)) {
        DoubleList<WordItem>::item *it = Dict.find_fist(wrd);
        it->value.count++;
    }
    else {
        Dict.add(wrd);
    }
}
 
void Dictionary::show(){
    if (Dict.get_size()) {
        DoubleList<WordItem>::item *pTemp = Dict.begin();
        while (pTemp) {
            cout << endl << pTemp->value.word 
                << " (" << pTemp->value.count << ")";
            pTemp = pTemp->pNext;
        }
    }
}





Добавлено через 13 минут
Короче, дело не в этой структуре. Проблемы начинаются, когда задействую шаблон класса DoubleList.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2016, 08:59
Помогаю со студенческими работами здесь

Метод класса возвращающий итератор
Не могу заставить метод класса возвращать итератор, помогите понять почему компилятор не разрешает...

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: ...

Арифметика Класса Двусвязного списка
Всем привет. тут такая проблема есть у меня программа создание двусвязного циклического списка и...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru