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

С2440-С++

11.05.2021, 11:35. Показов 588. Ответов 2
Метки нет (Все метки)

Всем привет! Помогите решить ошибку, а то сижу и понять не могу в чем проблема

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2440 <function-style-cast>: невозможно преобразовать "initializer list" в "List<MyType>::Iterator" LAB! C:\Users\ma0sk\source\repos\LAB!\LAB!\List.h 405

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2440 <function-style-cast>: невозможно преобразовать "initializer list" в "List<MyType>::Iterator" LAB! C:\Users\ma0sk\source\repos\LAB!\LAB!\List.h 410

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2440 <function-style-cast>: невозможно преобразовать "initializer list" в "List<MyType>::rIterator" LAB! C:\Users\ma0sk\source\repos\LAB!\LAB!\List.h 416

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2440 <function-style-cast>: невозможно преобразовать "initializer list" в "List<MyType>::rIterator" LAB! C:\Users\ma0sk\source\repos\LAB!\LAB!\List.h 418

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2440 <function-style-cast>: невозможно преобразовать "initializer list" в "List<MyType>::rIterator" LAB! C:\Users\ma0sk\source\repos\LAB!\LAB!\List.h 424

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2440 <function-style-cast>: невозможно преобразовать "initializer list" в "List<MyType>::rIterator" LAB! C:\Users\ma0sk\source\repos\LAB!\LAB!\List.h 426


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
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
List.h
 
#include <exception>
#include<iostream>
using namespace std;
 
template <class T> class List
{
protected:
    class Node
    {
    public:
        T item;//значение объекта в элементе
        Node* prev;// указатель на предыдущий
        Node* next;//указатель на следующий
        //Node(T item); //конструктор элемента
    };
 
    int length; //длина списка
    Node* first;    //указатель на первый элемент
    Node* last; //указатель на последний элемент
    int looked; //просмотренные элементы
 
public:
    List();//конструктор без параметров
    List(const List<T>& anotherList);//конструктор копирования
    ~List(void);//деструктор
    int sizeOfList();//опрос размера списка
    void deleteList();//очистка списка
    bool EmptyList();//проверка списка на пустоту
    bool findObject(T obj);//опрос наличия заданного значения
    T readObject(int num);//чтение значения с заданным номером
    bool changeObject(int num, T obj);//изменение значения с заданным номером
    int getIndex(T obj);//получение позиции в списке с заданным значением
    void add(T obj);//включение нового значения
    bool addNewIndex(int num, T obj);//включение нового значения в позицию с заданным номером
    bool deleteObject(T obj);//удаление заданного значения
    bool deleteIndex(int num);//удаления значения из позиции с заданным номером
    void show_list();
    int GetLooked() { return looked; }
    void GetTest(long long n, long long m);
    long long myrand();
 
 
    class Iterator
    {
    private:
        List<Node>* DoublyList;//указатель на объект коллекции
        Node* ptrToElem;//указатель на текущий элемент коллекции
        int cur;
    public:
        Iterator(List<Node>* list, int length);//конструктор
        bool operator++(int);
        bool operator--(int);
        bool operator==(Iterator other);
        bool operator!=(Iterator other);
        T& operator*();//доспуп к данным текущего элемента
    };
 
    class rIterator {
    private:
        List<Node>* DoublyList;//указатель на объект коллекции
        Node* ptrToElem;//указатель на текущий элемент коллекции
        int cur;
    public:
        rIterator(List<Node>* list, int length);
        T& operator*();//доспуп к данным текущего элемента 
        bool operator++(int);
        bool operator--(int);
        bool operator==(rIterator other);
        bool operator!=(rIterator other);
    };
    friend class Iterator;
    friend class rIterator;
 
    Iterator begin();
    Iterator end();
 
    rIterator rbegin();
    rIterator rend();
};
 
//конструктор без параметров
template<class T> List<T>::List()
{
    first = last = NULL;
    length = 0;
    looked = 0;
}
 
//конструктор копирования
template<class T> List<T>::List(const List<T>& anotherList)
{
    first = last = NULL;
    length = 0;
    looked = 0;
    Node* temp = anotherList.first; //начало списка, откуда копируем
    while (temp != NULL) //пока не конец списка
    {
        this->add(temp->item);
        temp = temp->next;
    }
}
 
//деструктор
template<class T> List<T>::~List(void)
{
    deleteList();
}
 
//опрос размера списка    
template<class T> int List<T>::sizeOfList()
{
    return length;
}
 
//очистка списка
template<class T> void List<T>::deleteList()
{
    while (first != NULL)//пока по адресу на начало списка что-то есть
    {
        last = first->next;//резервная копия след элемента списка
        delete first; //очистка памяти от первого элемента
        first = last; // смена адреса начала на адрес след
    }
    looked = length;
    length = 0;
}
 
//проверка списка на пустоту
template<class T> bool List<T>::EmptyList()
{
    return (first == NULL && length == 0 && last == NULL);
}
 
//опрос наличия заданного значения
template<class T> bool List<T>::findObject(T obj)
{
    Node* temp = first; //запоминаем адрес первого
    looked = 0;
    while (temp != NULL)
    {
        if (temp->item == obj)
            return true;
        else
            temp = temp->next;
        looked++;
    }
    return false;
}
 
//чтение значения с заданным номером
template<class T> T List<T>::readObject(int num)
{
    if (num < 1 || num > length)
    {
        return -1;
    }
    Node* temp;
    looked = 0;
    if (length / 2 > num)//рассматриваем 2 случая, если середина больше, чем выбранный номер 
    {
        temp = first;
        for (int cur = 1; cur != num; cur++, looked++)
            temp = temp->next;
    }
    else
    {
        temp = last;
        for (int cur = length; cur != num; cur--, looked++)
            temp = temp->prev;
    }
    return temp->item;
}
 
//изменение значения с заданным номером
template<class T> bool List<T>::changeObject(int num, T obj)
{
    looked = 0;
    if (num < 1 || num > length)
    {
        return false;
    }
    Node* temp;
    if (length / 2 > num)//рассматриваем 2 случая, если середина больше, чем выбранный номер 
    {
        temp = first;
        for (int cur = 1; cur != num; cur++, looked++)
            temp = temp->next;
    }
    else
    {
        temp = last;
        for (int cur = length; cur != num; cur--, looked++)
            temp = temp->prev;
    }
    temp->item = obj;
    return true;
}
 
//получение позиции в списке с заданным значением
template<class T> int List<T>::getIndex(T obj)
{
    looked = 0;
    Node* temp = first; //запоминаем адрес первого
    while (temp != NULL)
    {
        looked++;
        if (temp->item == obj)
            return looked;
        else
            temp = temp->next;
    }
    return 0;
}
 
//включение нового значения
template<class T> void List<T>::add(T obj) {
    looked = 0;
    Node* temp = new Node; //выделение памяти под новое значение
    temp->next = NULL; //указываем, что изначально по след адресу пусто
    temp->item = obj; //записываем значение в список
    if (first != NULL) //если список не пуст
    {
        looked++;
        temp->prev = last; //указываем адрес на пред элемент в сооот.поле
        last->next = temp; //указываем адрес след за  концом элемента
    }
    else //если список пуст
    {
        temp->prev = NULL;  //пред элемент указывает в пустоту
        first = temp; //перв.эл=посл.эл=добавленный эл.
    }
    last = temp; //меняем адрес конца
    length++;
}
 
//включение нового значения в позицию с заданным номером
template<class T> bool List<T>::addNewIndex(int num, T obj)
{
    if (num < 1 || num > length + 1)
    {
        return false;
    }
    if (num == length + 1) //если вставляем в конец списка (или в начало пустого)
    {
        add(obj);
        return true;
    }
    else if (num == 1) //в начало
    {
        Node* temp = new Node; //новый элемент
        temp->prev = NULL; //предыдущего нет
        temp->item = obj; //заполняем данные
        temp->next = first; //предыдущий - бывший конец списка
        first->prev = temp; //если элементы есть
        first = temp;
        looked = 1;
        length++;
        return true;
    }
    int i = 1;
    Node* Ins = first;
    while (i < num) //отчитываем от начала num-1 элементов
    {
        Ins = Ins->next;//доходим до эл-та, перед которым вставляется
        i++;
    }
    Node* PrevIns = Ins->prev; //доходим до эл-та, который предшествует
    Node* temp = new Node;
    temp->item = obj; //заполняем данные
    if (PrevIns != 0 && length != 1)
        PrevIns->next = temp;
    temp->next = Ins;
    temp->prev = PrevIns;
    Ins->prev = temp;
    looked = num / 2;
    length++;
    return true;
}
 
//удаление заданного значения  
template<class T> bool List<T>::deleteObject(T obj)
{
    looked = 0;
    Node* temp = first; //запоминаем адрес первого
    while (temp != NULL)
    {
        looked++;
        if (temp->item == obj)
        {
            Node* exnext = temp->next;
            Node* exprev = temp->prev;
            if (exprev == NULL)//Если удаляемый был первым
                first = exnext;
            if (exnext == NULL)//Если удаляемый был последним
                last = exprev;
            if (exprev != NULL)//Если есть предыдущий
                exprev->next = exnext;//Исключаем связь с удаляемым
            if (exnext != NULL)//Если есть следующий
            {
                exnext->prev = exprev;//Исключаем связь с удаляемым
            }
            delete temp;
            length--;
            return true;
        }
        else
            temp = temp->next;
 
    }
    return false;
}
 
//удаление значения из позиции с заданным номером
template<class T> bool  List<T>::deleteIndex(int num)
{
    looked = 0;
    if (num < 1 || num > length)
    {
        return false;
    }
    Node* temp;
    if (length / 2 > num)//рассматриваем 2 случая, если середина больше, чем выбранный номер 
    {
        temp = first;
        for (int cur = 1; cur != num; cur++, looked++)// 
            temp = temp->next;
    }
    else
    {
        temp = last;
        for (int cur = length; cur != num; cur--, looked++)//
            temp = temp->prev;
    }
    Node* exnext = temp->next;
    Node* exprev = temp->prev;
    if (exprev == NULL)//Если удаляемый был первым
        first = exnext;
    if (exnext == NULL)//Если удаляемый был последним
        last = exprev;
    if (exprev != NULL)//Если есть предыдущий
        exprev->next = exnext;//Исключаем связь с удаляемым
    if (exnext != NULL)//Если есть следующий
        exnext->prev = exprev;//Исключаем связь с удаляемым
    ///looked++;
    delete temp;
    length--;
    return true;
}
 
template <class T> void  List<T>::show_list()
{
    // Если в списке присутствуют элементы, то пробегаем по нему
   // и печатаем элементы, начиная с головного
    if (!EmptyList())
    {
        Node* temp = first;
        cout << "( ";
        while (temp->next != NULL)
        {
            cout << temp->item << ", ";
            temp = temp->next;
        }
 
        cout << temp->item << " )" << endl;
    }
    else
        cout << "Список пуст" << endl;
    looked = length;
}
 
template <class T>  long long List<T>::myrand()
{
    return rand() << 16 | rand();
}
 
template <class T>  void  List<T>::GetTest(long long n, long long m)
{
    List<long long>  testA;
    for (int i = 0; i < n; i++)
        testA.add(myrand() % m);
    double A = 0, D = 0, R = 0;
    for (int i = 0; i < n / 2; i++)
    {
        testA.deleteIndex(myrand() % n);
        D += testA.GetLooked();
        testA.addNewIndex(myrand() % n, myrand() % m);
        A += testA.GetLooked();
        testA.findObject(myrand() % m);
        R += testA.GetLooked();
    }
    cout << "Удаление: " << D / (n / 2) << "   ";
    cout << "Вставка: " << A / (n / 2) << "   ";
    cout << "Поиск: " << R / (n / 2) << endl;
 
}
 
//--------------------------------------------
 
 
template <class Node>
typename List<Node>::Iterator List<Node>::begin() {
    return Iterator(this, 0);
}
 
template <class Node>
typename List<Node>::Iterator List<Node>::end() {
    return Iterator(this->last, length);
}
 
template <class Node>
typename List<Node>::rIterator List<Node>::rbegin() {
    if (length > 0) {
        return rIterator(this, 0);
    }
    else return rIterator(this, 0);
}
 
template <class Node>
typename List<Node>::rIterator List<Node>::rend() {
    if (length > 0) {
        return rIterator(this, length);
    }
    else return rIterator(this, 0);
}
 
//Iterator-------------------------------------
 
template <class Node>
List<Node>::Iterator::Iterator(List<Node>* DoublyList, int cur) {
    this->DoublyList = DoublyList;
    this->cur = cur;
 
    if (cur < 0) {
        this->cur = 0;
        ptrToElem = DoublyList->first;
    }
    else if (cur >= DoublyList->GetLooked()) {
        this->cur = DoublyList->GetLooked();
        ptrToElem = DoublyList->first + this->cur;
    }
    else {
        ptrToElem = DoublyList->last + cur;
    }
 
}
 
template <class T>
T& List<T>::Iterator::operator*() {
    if (cur != NULL)
        return cur->item;
    else
        throw exception("Вышли за пределы");
};
 
template <class T>
bool List<T>::Iterator::operator++(int) {
    if (cur->next != NULL)
        cur = cur->next;
    else
        throw exception("Вышли за пределы");
};
 
template <class T>
bool List<T>::Iterator::operator--(int) {
    if (cur != NULL)
        cur = cur->prev;
    else
        throw exception("Вышли за пределы");
};
 
template <class T>
bool List<T>::Iterator::operator==(List<T>::Iterator other) {
    if ((this->cur == other.cur) && (this->DoublyList == other.DoublyList)) {
        return true;
    }
    else return false;
};
 
template <class T>
bool List<T>::Iterator::operator!=(List<T>::Iterator other) {
    if ((this->cur == other.cur) && (this->DoublyList == other.DoublyList)) {
        return false;
    }
    else return true;
}
 
//-------------------------------------------------------------------------------
//rIterator
 
template <class T>
List<T>::rIterator::rIterator(List<Node>* DoublyList, int cur) {
    this->DoublyList = DoublyList;
    this->cur = DoublyList->GetLooked() - cur - 1;
 
    if (cur < 0) {
        this->cur = DoublyList->GetLooked() - 1;
        ptrToElem = DoublyList->last + this->cur;
    }
    else if (cur >= DoublyList->GetLooked()) {
        this->cur = -1;
        ptrToElem = DoublyList->last + this->cur;
    }
    else {
        ptrToElem = DoublyList->first + this->cur;
    }
};
 
template <class T>
T& List<T>::rIterator::operator*() {
    if (cur != NULL)
        return cur->item;
    else
        throw exception("Вышли за пределы");
}
 
template <class T>
bool List<T>::rIterator::operator++(int) {
    if (cur != NULL)
        cur = cur->prev;
    else
        throw exception("Вышли за пределы");
}
 
template <class T>
bool List<T>::rIterator::operator--(int) {
    if (cur->next != NULL)
        cur = cur->next;
    else
        throw exception("Вышли за пределы");
}
 
template <class T>
bool List<T>::rIterator::operator==(List<T>::rIterator other) {
    if ((this->cur == other.cur) && (this->DoublyList == other.DoublyList)) {
        return true;
    }
    else return false;
}
 
template <class T>
bool List<T>::rIterator::operator!=(List<T>::rIterator other) {
    if ((this->cur == other.cur) && (this->DoublyList == other.DoublyList)) {
        return false;
    }
    else return true;
}

-----------------------
List.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
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
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
#include "List.h"
#include <cstdlib>
#include <cstdio>
#include <conio.h>
#include <iostream>
#include <ctime>
#include <numeric>
 
using namespace std;
 
typedef int MyType;
 
 
void printIteratorMenuBar(bool direction) {
    if (direction == true) {
        std::cout << "Меню прямого итератора:" << endl;
    }
    else {
        std::cout << "Меню обратного итератора:" << endl;
    }
    std::cout << "[1] Следующий" << endl
        << "[2] Предыдущий" << endl
        << "[3] Получить текущее значение" << endl
        << "[4] Изменить текущее значение" << endl
        << "[0] Выход" << endl;
 
}
 
void iteratorMenu(typename List<MyType>::Iterator& iter) {
    int input;
    bool exit = false;
    while (!exit) {
 
        printIteratorMenuBar(1);
        std::cin >> input;
 
        try {
            switch (input) {
            case 1: {
                if (iter++) {
                    std::cout << "Итератор успешно сдвинут!" << endl;
                }
                else {
                    std::cout << "Итератор уже достиг конца. Сдвиг не выполнен!" << endl;
                };
                break;
            }
 
            case 2: {
                if (iter--) {
                    std::cout << "Итератор успешно сдвинут!" << endl;
                }
                else {
                    std::cout << "Итератор уже достиг конца. Сдвиг не выполнен!" << endl;
                };
                break;
            }
 
            case 3: {
                std::cout << "Текущее значение: " << *iter << endl;
                break;
            }
 
            case 4: {
                int temp;
                std::cout << "Текущее значение: " << *iter << endl;
                std::cout << "Введите новое значение: ";
                std::cin >> temp;
                *iter = temp;
                std::cout << "Запись значения прошла успешно!" << endl;
                break;
            }
 
            case 0: {
                exit = true;
                break;
            }
            default: {
                std::cout << "Ошибка ввода! Введите пункт меню заново\n";
                break;
            }
            }
        }
 
        catch (exception e) {
            std::cout << e.what() << endl;
        }
        catch (...) {
            std::cout << "Произошла непредвиденная ошибка в меню итератора!" << endl;
        }
    }
}
 
void riteratorMenu(typename List<MyType>::rIterator& riter) {
    int input;
    bool exit = false;
    while (!exit) {
 
        printIteratorMenuBar(1);
        cin >> input;
 
        try {
            switch (input) {
            case 1: {
                if (riter++) {
                    cout << "Итератор успешно сдвинут!" << endl;
                }
                else {
                    cout << "Итератор уже достиг конца. Сдвиг не выполнен!" << endl;
                };
                break;
            }
 
            case 2: {
                if (riter--) {
                    cout << "Итератор успешно сдвинут!" << endl;
                }
                else {
                    cout << "Итератор уже достиг конца. Сдвиг не выполнен!" << endl;
                };
                break;
            }
 
            case 3: {
                cout << "Текущее значение: " << *riter << endl;
                break;
            }
 
            case 4: {
                int temp;
                cout << "Текущее значение: " << *riter << endl;
                cout << "Введите новое значение: ";
                cin >> temp;
                *riter = temp;
                cout << "Запись значения прошла успешно!" << endl;
                break;
            }
 
            case 0: {
                exit = true;
                break;
            }
            default: {
                cout << "Ошибка ввода! Введите пункт меню заново\n";
                break;
            }
            }
        }
 
        catch (exception e) {
            cout << e.what() << endl;
        }
        catch (...) {
            cout << "Произошла непредвиденная ошибка в меню итератора!" << endl;
        }
    }
}
 
 
int main(int argc, char* argv[])
{
    srand((unsigned)time(NULL));
    List<MyType> mylist;
    int kol;
    /*  for(int i = 0; i < kol; i++)
            mylist.add(rand()%100);
    */
    List<MyType>::Iterator it = mylist.end();
    List<MyType>::rIterator rit = mylist.rend();
    bool isExit = false;    //Флаг выхода
    int size, x;
    //long long n,m;
    MyType z;
 
    setlocale(LC_ALL, "Russian");
    cout << "Меню:" << endl;
    cout << "0) просмотр списка" << endl;
    cout << "1) опрос размера списка" << endl;
    cout << "2) чистка списка" << endl;
    cout << "3) проверка списка на пустоту" << endl;
    cout << "4) опрос наличия заданного значения" << endl;
    cout << "5) чтение значения с заданным номером в списке" << endl;
    cout << "6) изменение значения с заданным номером в списке" << endl;
    cout << "7) получение позиции в списке с заданным значением" << endl;
    cout << "8) включение нового значения" << endl;
    cout << "9) включение нового значения в позицию с заданным номером" << endl;
    cout << "10) удаление заданного значения из списка" << endl;
    cout << "11) удаление значения из позиции с заданным номером" << endl;
    cout << "Итератор:" << endl;
    cout << "\t12) Запросить прямой итератор" << endl;
    cout << "\t13) Запросить обратный итератор" << endl;
    cout << "\t[14] Запросить неустановленный прямой итератор" << endl;
    cout << "\t[15] Запросить неустановленный обратный итератор" << endl;
    cout << "\t[16] Вывести массив" << endl;
    cout << "\t[17] Проверка Iterator == rIterator" << endl;
    cout << "\t[18] Проверка Iterator == end()" << endl;
    cout << "\t[19] Проверка rIterator == rend()" << endl;
    /*cout << "19) тест" << endl;*/
    cout << "27) Выход" << endl;
 
    while (!isExit)
    {
        int ans;    //Код нажатой клавиши
        cin >> ans;
 
        switch (ans)
        {
        case 0: //
            mylist.show_list();
            break;
        case 1: //
            size = mylist.sizeOfList();
            cout << size << endl;
            break;
 
        case 2:
            mylist.deleteList();
            cout << "Список очищен" << endl;
            break;
 
        case 3:
            cout << mylist.EmptyList() << endl;
            break;
        case 4:
            cout << "Введите значение" << endl;
            cin >> z;
            cout << mylist.findObject(z) << endl;
            break;
 
        case 5:
            cout << "Введите номер значения" << endl;
            cin >> x;
            z = mylist.readObject(x);
            if (z > -1)
                cout << "Значение по номеру = " << z << endl;
            else cout << "Значение по номеру не существует " << endl;
            break;
 
        case 6:
            cout << "Введите номер значения" << endl;
            cin >> x;
            cout << "Введите новое значение" << endl;
            cin >> z;
            cout << mylist.changeObject(x, z) << endl;
            break;
 
        case 7:
            cout << "Введите значение" << endl;
            cin >> z;
            cout << mylist.getIndex(z) << endl;
            break;
 
        case 8:
            cout << "Введите новое значение" << endl;
            cin >> z;
            mylist.add(z);
            cout << "Значение добавлено" << endl;
            break;
 
        case 9:
            cout << "Введите позицию вставки" << endl;
            cin >> x;
            cout << "Введите значение" << endl;
            cin >> z;
            cout << mylist.addNewIndex(x, z) << endl;
            break;
 
        case 10:
            cout << "Введите значение" << endl;
            cin >> z;
            cout << mylist.deleteObject(z) << endl;
            break;
        case 11:
            cout << "Введите номер значения" << endl;
            cin >> x;
            cout << mylist.deleteIndex(x) << endl;
            break;
            /*case 12:
 
                break;
            case 13:
                it.end();
                break;
            case 14:
                it.next();
                cout << CheckLimits(it)<<endl;
                break;
            case 15:
                it.prev();
                cout << CheckLimits(it)<<endl;
                break;
            case 16:
                cout << CheckLimits(it)<<endl;
                break;
            case 17:
                try
                {
                    cout << "Текущее значение "<< *it  << endl;
                }
                catch(exception e)
                {
                    cout << e.what() << endl;
                }
                break;
            case 18:
                try
                {
                    cout << "Введите значение" <<endl;
                    cin>> z;
                    *it = z;
                }
                catch(exception e)
                {
                    cout << e.what() << endl;
                }
                break;*/
        case 12: {
            mylist.begin();
            iteratorMenu(it);
            break;
        }
 
        case 13: {
            mylist.rbegin();
            riteratorMenu(rit);
            break;
        }
 
        case 14: {
            mylist.end();
            iteratorMenu(it);
            break;
        }
 
        case 15: {
            mylist.rend();
            riteratorMenu(rit);
            break;
        }
 
 
        case 17: {
            cout << "Результат проверки: " << ((*it) == (*rit)) << endl;
            break;
        }
 
        case 18: {
            cout << "Результат проверки: " << (it == mylist.end()) << endl;
            break;
        }
 
        case 19: {
            cout << "Результат проверки: " << (rit == mylist.rend()) << endl;
            break;
        }
 
               /*case 19:
                   cout << "Введите размер" <<endl;
                   cin>> n;
                   cout << "Введите интервал" <<endl;
                   cin>> m;
                   system("cls");
                   for(int iter = 1000;iter <=n;iter+=1000){
                       mylist.GetTest(iter,  m);
                   }
                   break;*/
        case 27:    //Выход
            isExit = true;
            break;
        default:    //Нажата клавиша, не соответствующая ни одной команде
            cout << "Неизвестная команда" << endl;
        }
    }
    cout << "\nВведите размерность списка" << endl;
    cin >> kol;
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2021, 11:35
Ответы с готовыми решениями:

Ошибка С2440 С++
#include&lt;iostream&gt; #include&lt;Windows.h&gt; #include&lt;conio.h&gt; #include&lt;string&gt; #include&lt;cstring&gt;...

Ошибка С2440
char a = *sr; Ошибка 1 error C2440: инициализация: невозможно преобразовать...

Ошибка С2440 невозможно преобразовать
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #include...

Ошибка С2440 невозможно преобразовать итератор в лонг лонг
Подскажите, пожалуйста в чем ошибка?

2
129 / 81 / 49
Регистрация: 10.01.2020
Сообщений: 293
11.05.2021, 13:40 2
Nikita_22334455,
1. Каким ..., я извиняюсь, в тип данных List попал Node в строках 48 и 62 List<Node>, когда тип списка идет T?
2. Зачем вообще в итераторе нужен указатель на обьект коллекции? Это так важно? Узел есть и ничего больше не надо, а так будет лишний указатель с данными за которым нужно следить.
Конечно же на всех строках с ошибками вы пытаетесь то List<T> к List<Node> прикастить, то Node в List<Node>.
3. Тем что вы сделали шаблонный тип Node, когда у вас и так есть тип Node вы спровоцировали конфликт имен типов.
Нужно определять также template<typename T>.
Это как минимум. Ошибки, которые выдает - не последние.
0
С чаем беда...
Эксперт CЭксперт С++
10008 / 5354 / 1467
Регистрация: 18.10.2014
Сообщений: 12,909
11.05.2021, 17:11 3
Цитата Сообщение от Nikita_22334455 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    class Iterator
    {
        int cur;
...
template <class T>
T& List<T>::Iterator::operator*() {
    if (cur != NULL)
        return cur->item;
Что это? Что такое cur != NULL для целого типа? Что такое cur-> для целого типа?

Цитата Сообщение от Nikita_22334455 Посмотреть сообщение
C++
1
2
3
4
template <class Node>
typename List<Node>::Iterator List<Node>::begin() {
    return Iterator(this, 0);
}
Здесь this - это List<T> *. У вашего итератора нет конструктора, который бы принимал первым параметром List<T> *. У вас написан какой-то загадочный конструктор для List<Node> *. Что такое List<Node> и зачем оно вам понадобилось - не ясно вообще.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2021, 17:11
Помогаю со студенческими работами здесь

Ошибка С2440 a value of type "Sylinteri *" cannot be used to initialize an entiti of type "Kappale"
Помогите, люди добрые! Не пойму, почему шайтан-машина не компилирует #include &quot;Sylinteri.h&quot;...


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

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

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